題目
給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。
你可以假設數組中無重複元素。
示例 1:
輸入: [1,3,5,6], 5
輸出: 2
示例 2:
輸入: [1,3,5,6], 2
輸出: 1
示例 3:
輸入: [1,3,5,6], 7
輸出: 4
示例 4:
輸入: [1,3,5,6], 0
輸出: 0
來源:35. 搜索插入位置
分析
這題沒什麼好說的,就是查找,簡單的直接暴力查找,依次遍歷即可;如果要提高效率的話,可採用二分法查找。
因爲數組已有序,因此每次只需判斷中間位置的數與目標值的大小,分成前後兩個半區查找,以此類推,直到半區長度爲1。若沒查到,說明此元素不在數組中,其插入的位置應是半區的左邊下限的位置。
代碼
public static int searchInsert(int[] nums, int target) {
if(nums.length==0){
return 0;
}
int low=0;
int high= nums.length-1;
while(low<=high){
int mid=(high+low)/2;
if(target==nums[mid]){
return mid;
}else if(target>nums[mid]){
low=mid+1;
}else {
high=mid-1;
}
}
return low;
}
2020.03.20