35 搜尋插入位置
阿新 • • 發佈:2021-01-27
技術標籤:# 二分專題javaleetcode演算法資料結構
35. 搜尋插入位置
給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
你可以假設陣列中無重複元素。
示例 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
思路:
check條件: 首先我們的check
條件應該是找到第一個大於等於target
的位置即check if (nums[mid] >= target)
更新: 更新時, if (nums[mid] >= target)
我們可以判斷結果位置應該在mid左邊而且包含mid
如: r = mid
模板: 因此我們套用第一套模板(mid = l + r >> 1
不用加1
的那套)
邊界: 注意此題需要考慮特殊情況即當所有數都比target
小的情況,此時退出的情況是l=r=nums.size()-1
,明顯我們的結果應該在邊界+1
的位置,因此當結果為nums.size()-1
時需要特判一下,程式碼如下:
Java程式碼
class Solution {
public int searchInsert(int[] nums, int target) {
if(nums == null || nums.length == 0) return 0;
int l = 0,r = nums.length - 1;
//找到第一個大於等於target的位置
while(l < r){
int mid = l + r >> 1;
if(nums[mid] >= target) r = mid;
else l = mid + 1;
}
//當所有數都比target小的情況,此時退出的情況是l=r=nums.size()-1,
//此時明顯我們的結果應該在邊界+1的位置,因此當結果為nums.size()-1時需要特判一下
if(l == nums.length - 1 && target > nums[l]) l++;
return l;
}
}