https://leetcode-cn.com/problems/search-insert-position/
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
解题关键:明白几种查找方式,因为是有序数组,最好采用二分查找。
int searchInsert(int* nums, int numsSize, int target) {
int left=0,right=numsSize-1,middle = (left+right)/2; //二分查找
while(left < right){
if(target==nums[middle]) return middle;
else if(target < nums[middle]){
right = middle - 1;
middle = (left+right)/2;
}
else{
left = middle + 1;
middle = (left+right)/2;
}
} //最终出循环只可能两种情况
if(left == right){ //若left==right,比较当前元素后,返回相应整数
if(nums[left]>=target) return left;
else return left+1;
}
if(left>right) return left; //若left小于right则可确定该数一定加在left左边
return 0; //这句无实际作用,但是不加过不了编译
}