题解 | 二分查找-I

二分查找-I

https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @param target int整型
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        //别忘了首先排除空数组
        if (nums.empty()) {
            return -1;
        }
        // write code here
        int len = nums.size();


        int lower = 0;
        int upper = len - 1;
        int indexCurr = len / 2;
        while (target != nums[indexCurr]) {
            if (nums[indexCurr] > target) {
                upper = indexCurr;

                //判断上下界举例是否小于1
                if (upper - lower > 1) {
                    indexCurr = upper - (upper - lower) / 2;
                } else {
                    indexCurr = upper - 1;
                    //数组没有找到的情况
                    if (nums[indexCurr] != target) {
                        return -1;
                    }
                }
            }

            else {
                lower = indexCurr;
                if (upper - lower > 1) {
                    indexCurr = lower + (upper - lower) / 2;
                } else {
                    indexCurr = lower + 1;
                    //数组没有找到的情况
                    if (nums[indexCurr] != target) {
                        return -1;
                    }
                }
            }
        }

        return indexCurr;
    }
};

全部评论

相关推荐

xxxxOxo:该催就催,想要你的不会因为催就挂,催了就挂的是因为本来就要挂你
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务