主要关注时间复杂度,不为n所以不能使用暴力法求解,应该使用二分查找法(时间复杂度(logn))
设置两个节点,一个为最开始,一个为最末尾,此题描述为寻找,假如存在,返回下标,不存在插入,所以二分法的判断条件不仅仅是相等,而增加了大于的判断条件
对二分法进行套用,找到目标或者值比目标值大的时候记录下标
二分查找的思路
从数组的中间开始找,如果找到,搜索结束,如果没找到,比较目标元素和中间值的大小,目标值大,则应该在左边查找(假如为升序排列),下界应该发生变化,若目标值小,上界应该发生变化。
class Solution {
public:
int searchInsert(vector
int l=nums.size();//数组长度
int low=0;
int high=l-1;
int mid;
int ans;//要返回的下标
while(low { mid=(low+high)>>1;//相当于两者求和÷2取整数 if(target { ans =mid; high=mid-1;//向右查找 } else low=mid+1;//向左查找 } return ans ;//返回下标 } };