力扣热题:搜索插入位置
开篇
对于想要学会二分查找的算法萌新来说,这道题是非常友好的学习题目,完完全全按照二分查找模版就可以完成。大伙儿还不赶紧练起来!
题目链接:35.搜索插入位置
题目描述
代码思路
这道题时完完全全的二分查找问题,模版一套,潇洒提交
知识点:二分查找
二分查找是将数组/顺序表等分解为3个查找区间:前后两个区间的规模大致相等,中间区间长度为1.
(1)if (待查记录的关键字k1 == 中间区间记录的关键字k2),则查找成功。(2)else if (k1 < k2),说明待查记录只可能在前半区,则在前半区应用相同策略继续查找;
(3)else,说明待查记录只可能在后半区,则在后半区应用相同策略继续查找;
不断缩小前半区或者后半区,并且继续查找的过程符合分治法的特征:
(1)区间长度 <= 1时,要么查找成功,要么失败。
(2)区间长度 > 1时,分解为3个子问题,这些子问题与原问题具有相同特征。
(3)比较特殊的是:折半查找的解要么是其中一个子问题的解,要么无解,所以无需进行子解的组合。
代码逐行解析版
class Solution {
public int searchInsert(int[] nums, int target) {
int mid;
int low = 0,high = nums.length - 1;//双指针,low和high分别位于数组两侧
while(low <= high){
mid = (low + high) / 2; //去中间值
//下面是三种情况,相等时直接返回,大于或小于时则收缩搜查范围
if(nums[mid] == target) return mid;
else if(nums[mid] > target) high = mid - 1;
else low = mid + 1;
}
return low;
}
}
结语
通过这道简单题,相信大家对二分查找有一定的了解,可以尝试吧这个模版背起来,以后遇到就可以套上去。一键关注孤舟一叶~,每天给大家带来力扣题的分析,一起提升算法水平。