正确的C++代码如下:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
/***vector数组可以去查阅相关命令[https://blog.csdn.net/Flag_ing/article/details/123380655]***/
int n=nums.size(); /***首先会获得数组的长度n,采用 nums.size()***/
int left=0;
int right=n-1;/***二分查找首先是将数组的最左边元素的序号与最右边的序号进行定义***/
int ans=n;/***这是返回的输出值***/
while (left<=right){/***当左侧序号值小于等于右侧序号值时,进行循环***/
int mid=((right-left)>>1)+left; /***这是一个比较好的用法,将两者之差向后移动一位,该移动是建立在二进制上的,其效果相当于除以2***/
if (nums[mid]>=target){/***可以理解为高中数学里的二分法,将数组里的数字与给定的target进行比较***/
right=mid-1; /*** 将right的编号进行重新赋予,定义新的搜索区间***/
ans=mid;/***ans返回值更新为mid***/
}else{
left=mid+1;/***否则将left进行重新赋予***/
}
}
return ans;
}
};
/***里面有几个细节:
1. 为什么ans初值要定义为int ans=n; 示例3给出了答案。
2. 如果if条件语句中的'right=mid','left=mid'会出现什么样的情况?可以在leetcode里面尝试一下。***/