題目:
給定一個排序的整數陣列 nums
和一個目標值 target
:
target
存在於陣列中,回傳其索引。target
不存在,則回傳它按順序應該插入的位置。範例:
範例 1:
輸入:nums = [1,3,5,6], target = 5
輸出:2
範例 2:
輸入:nums = [1,3,5,6], target = 2
輸出:1
範例 3:
輸入:nums = [1,3,5,6], target = 7
輸出:4
範例 4:
輸入:nums = [1,3,5,6], target = 0
輸出:0
因為題目有要求用 O(log n) 的演演算法完成,所以這題就是應用二元搜尋的方式來解題,while 迴圈的部份再注意一下結束條件,
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
int mid = (right - left) / 2 + left;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else { // nums[mid] < target
left = mid + 1;
}
}
return left;
}
};
時間複雜度:O(log n)
空間複雜度:O(1)
參考:
#35. Search Insert Position