有哪些网站可以接单做效果图,文学网站开发,wordpress 图片边框,如何个网站做二维码数组_二分查找 一、leetcode-572二、题解1.代码2.思考 一、leetcode-572
二分查找 给定一个 n 个元素有序的#xff08;升序#xff09;整型数组 nums 和一个目标值 target #xff0c;写一个函数搜索 nums 中的 target#xff0c;如果目标值存在返回下标#xff0c;否则… 数组_二分查找 一、leetcode-572二、题解1.代码2.思考 一、leetcode-572
二分查找 给定一个 n 个元素有序的升序整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target如果目标值存在返回下标否则返回 -1。
样例输入nums [-1,0,3,5,9,12], target 9
样例输出 4
解释: 9 出现在 nums 中并且下标为 4 二、题解
1.代码
class Solution {
public:int search(vectorint nums, int target) {for(int i0,jnums.size()-1,k;ij;){k(ij)/2;if(targetnums[k]){return k;}else if(targetnums[k]){ik1;}else{jk-1;}}return -1;}
};2.思考
对区间的定义想清楚区间的定义就是不变量。要在二分查找的过程中保持不变量就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作这就是循环不变量规则。 也就是[left, right] 这个很重要非常重要
while (left right) 要使用 因为left right是有意义的所以使用 if (nums[middle] target) right 要赋值为 middle - 1因为当前这个nums[middle]一定不是target那么接下来要查找的左区间结束下标位置就是 middle - 1