題目:給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。
請必須使用時間複雜度為 O(log n) 的演算法。nums 為 無重複元素 的 升序 排列陣列
解法一:左閉右閉區間。(left = 0, right = nums.length - 1)
思路:同二分法,但是需要返回未找到的插入位置,當最後一次查詢發現target < nums[mid],得出target應該插入在mid,當最後一次查詢發現target > nums[mid],得出target應該插入在mid + 1.
程式碼如下:
點選檢視程式碼
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(target == nums[mid]) {
return mid;
}else if(target < nums[mid]) {
right = mid - 1;
}else {
left = mid + 1;
}
}
return right + 1;
}
}