1.題目
題目分析:
?給一個目標值,然后要在排序的整數數組中,找到跟目標值一樣的,如果沒有就把這個值插入進去,然后返回插入后的下標。
2.算法原理
根據題目的時間復雜度可以知道要用二分,開始劃分區域,分成小于t的,和大于等于t的,這里之所以有大于等于是可能不存在,就要插入到大于t的前一個位置,結果是會在大于等于的地方出現的,所以觸發else就right=min,而不是min-1,因為min本身可能就是最后位置,-1就跳過了答案,小于就left=mid+1,min的值就是left+(right-left)/2,因為right=min。最后還需要注意,有的情況是出了邊界,而二分最多到最后一個位置,所以需要判斷是否相等跟t,不相等就說明在下一個位置。
3.代碼實現
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left=0,right=nums.size()-1;while(left<right){int min=left+(right-left)/2;if(nums[min]<target) left=min+1;else right=min;}if(nums[right]<target) return right+1;return right;}
};