美文网首页
【LeetCode-704| 二分查找】

【LeetCode-704| 二分查找】

作者: CurryCoder | 来源:发表于2021-09-27 23:29 被阅读0次
题目描述.jpg
#include <iostream>
#include <vector>


using namespace std;

/* 二分法使用的提示信息:数组元素有序排列、数组中无重复元素 */

/* 区间不变量: 保证在while循环中每次边界的处理都坚持相同的区间定义,[left, right] 或者[left, right)*/
class Solution {
public:
    int bsearch1(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;  // 定义target在左闭右闭的区间里,即:[left, right]
        while(left <= right) {
            int mid = left + (right - left) / 2;   // 防止数据溢出,因此mid的求法不是(left + right) / 2
            if(nums[mid] > target) {
                right = mid - 1;  // [left, mid - 1]
            } else if(nums[mid] < target) {
                left = mid + 1;  // [mid + 1, right]

            } else {
                return mid;
            }
        }
        return -1;
    }

    int bsearch2(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size();  // 定义target在左闭右开的区间里,即:[left, right)

        while(left < right) {
            int mid = left + ((right - left) >> 1);
            if(nums[mid] > target) {
                right = mid;  // [left, mid)
            } else if(nums[mid] < target) {
                left = mid + 1; // [mid + 1, right)
            } else {
                return mid;
            }
        }
        return -1;
    }

};

相关文章

网友评论

      本文标题:【LeetCode-704| 二分查找】

      本文链接:https://www.haomeiwen.com/subject/puqlnltx.html