二分查找法(力扣)

题目:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

思路:

想法一:

因为是升序,从中间开始比较,若大于,则从大于部分的中间开始比较,循环条件为左边小于等于右边,直到找出目标值。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0,right = nums.size() - 1;
        int mid = (right - left)/2 + left;
        while(left <= right){
            int mid = (right - left)/2 + left;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }
        }
        return -1;


    }
};

简单的二分查找法。
一个知识点:不能用(left+right)/2形式,当left和right都是int,两个值的初始值都超过int限定大小的一半,那么left+right就会发生溢出,所以应该用left+(right-left)/2来防止求中值时候的溢出。

posted @ 2023-02-21 17:09  ku然  阅读(37)  评论(0)    收藏  举报