参考链接:
leetcode链接:https://leetcode-cn.com/problems/search-insert-position/
做完这道题目,咱们趁热打铁,顺便做一下,这道搜索插入位置,这道题目,
思路1:暴力法:
方法1
class Solution {
public int searchInsert(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
if(nums[i]>=target){
return i; //如果元素i等于或者大于目标值,那么就返回目标值的位置,并结束循环
}
}
return nums.length; //如果全部遍历之后,没有相匹配的,那么就放到最后面,即返回数组长度
}
}
解释说明
为甚么最后还要返回nums.length,前面不是已经返回i了吗
[1,2,3,4] target=5 这种情况
缺点:
不用二分的话数组一大你这个遍历的方法就会慢了,假如有100个元素,target大于第100个元素,那就得遍历一遍,就慢了。数据量上去的话还是用二分吧,要不然时间上你这差好多
很明显这种做法的算法时间复杂度很差,有序表的查找时间复杂度O(n)就是暴力破解
思路2:前提:没有绝对的代码,只有大体相同的思路,思路正确,我们只要用代码能够模拟出整个过程,那么这道题目就算是解出来了
找个具体例子,我们手动模拟一遍,就会发现,原来是这么一回事。
我们举个最简单的例子,
1,2,3,5,6
我们分别去查找0,4,7
然后就会通过对二分查找的模拟,就会发现,只需要返回l就会是我们需要的答案。
(题外话:二分查找是前人智慧的结晶,确实好用,hahah)
参考链接:
https://www.cnblogs.com/kyoner/p/11080078.html
java实现二分查找:https://www.cnblogs.com/luomeng/p/10585291.html
二分查找学习视频:https://www.bilibili.com/video/BV1b7411N798?p=70