题目链接https://leetcode.com/problems/search-insert-position/description/
题目大意:给出一串升序数组和一个整数,在这个数组中找出整数所在的位置,若数组中没有该整数,则给出该整数应该插入的位置(仍保持有序)。
法一:直接遍历一遍数组,找到则返回下标,找不到则返回应该插入的下标值。时间复杂度为o(n)。
1 for(int i = 0; i < nums.length; i++) { 2 if(nums[i] == target) { 3 return i; 4 } 5 else if(target < nums[i]) { 6 return i; 7 } 8 } 9 return nums.length;
法二:由于是有序数组,则采用二分查找的办法,时间复杂度为o(log2n)。
1 int length = nums.length; 2 if(length == 1) {//处理特殊情况,也就是数组中只有一个数字的情况 3 if(target <= nums[0]) { 4 return 0; 5 } 6 else { 7 return 1; 8 } 9 } 10 int low = 0; 11 int high = length - 1; 12 int mid = (low + high) / 2; 13 while(low < high) {//二分查找 14 if(nums[mid] == target) { 15 return mid; 16 } 17 else if(target < nums[mid]) { 18 if(mid > 0 && target > nums[mid - 1]) { 19 return mid; 20 } 21 else if(mid > 0 && target == nums[mid - 1]) { 22 return mid - 1; 23 } 24 else { 25 high= mid - 1; 26 } 27 } 28 else if(target > nums[mid]) { 29 if(target < nums[mid + 1]) { 30 return mid + 1; 31 } 32 else if(target == nums[mid + 1]) { 33 return mid + 1; 34 } 35 else { 36 low = mid + 1; 37 } 38 } 39 mid = (low + high) / 2; 40 } 41 if(low == 0) {//处理特殊情况,当要插入在第一个位置时 42 return low; 43 } 44 return nums.length;//当要插入在最后一个位置时