博主在这个题是栽了一下,领悟了些许东西
目录
题目:
思路:
很容易想到,也算是只能用二分,
多了没找到的情况分析,易想到,没找到,也肯定能找到这个元素最接近的位置(毕竟你已经排去了很多元素,有下标,left,right,和mid),要思考的只是返回值用什么,
当然还有进阶!,当有多个目标元素,或者目标元素的上一个或下一个数是多个的(重复的)又该如何?
大佬的思考(超级重要!!):
建议不会的被虐一遍再看
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
代码+注释:
int searchInsert(int* nums, int numsSize, int target) {
//二分,这下博主终于有点印象了
int l = 0, r = numsSize - 1;
while(l <= r){
int mid = l + (r - l) / 2;
//刚开始我写(r + l) / 2 并没发现有啥区别 仔细一想是有可能超上限
//还见到有人写>> 1,因为是二进制很容易知道>>可以代替除2,至于什么好处,暂且不清楚
if(nums[mid] >= target){
//可以根据大佬https://leetcode.cn/problems/search-insert-position/solutions/333632/sou-suo-cha-ru-wei-zhi-by-leetcode-solution/comments/496785
//的思考,来分析一下,把等号归入r这里的原因,和归入l的区别
r = mid - 1;
}
else{
l = mid + 1;
}
}
return l;
}