继续打卡算法题,今天学习的是LeetCode的第35题搜索插入位置,这道题目是道简单题
。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。
分析一波题目
这个题目目的是为了搜索有序数组中的数,我们提高效率需要使用到二分法查找。
什么时候搜索结束呢?
比如在下面数组中搜索5,第一次中间数是4,比5小,那么下次需要往右边找
其实只会有两种情况,第一,目标数存在数组中,直接返回
第二,目标数不在数组中,此时我们需要找到第一个大于target的数
。
编码解决
class Solution {
public int searchInsert(int[] nums, int target) {
int start = 0;
int end = nums.length-1;
int mid = 0;
int result = nums.length; //默认最后插入位置
while(start <= end) {
mid = (end - start) / 2 + start;
//刚好相等
if(nums[mid] == target) {
return mid;
}
//在右边
if(nums[mid] < target) {
start = mid+1;
} else {
//在左边 大于target了,需要记录下来
end = mid-1;
result = mid; //最右边的插入位置
}
}
return result;
}
}
总结
二分法搜索法写法有两个点需要注意,一个是while条件,一个是更新left和right值。
while条件如果是start<=end, 更新条件需要使用start=mid+1或者end=mid-1