廣西網(wǎng)站建設(shè)費用寧波seo如何做推廣平臺
題目描述:
給定一個排序數(shù)組和一個目標(biāo)值,在數(shù)組中找到目標(biāo)值,并返回其索引。如果目標(biāo)值不存在于數(shù)組中,返回它將會被按順序插入的位置。
請必須使用時間復(fù)雜度為?O(log n)
?的算法。
示例 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
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
?為?無重復(fù)元素?的?升序?排列數(shù)組-104 <= target <= 104
思路及題解:
找到第一個大于等于target的數(shù)的下標(biāo)即可,如果沒有大于等于target的數(shù),就插入數(shù)組尾部,即返回numsSize。用二分法查找。
代碼:
int searchInsert(int* nums, int numsSize, int target){int lo=0;int hi=numsSize-1;int mid;int ans=numsSize;// if(nums[0]>target) return 0;// if(target>nums[hi]) return numsSize;//找第一個大于等于target的數(shù)while(lo<=hi){mid=(lo+hi)/2;if(target<=nums[mid]){ans=mid;hi=mid-1;}else{lo=mid+1;}}return ans;
}