LeetCode 剑指Offer 53 - I 在排序数组中查找数字I[二分法] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 剑指Offer 53 - I 在排序数组中查找数字I[二分法] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述解题思路:
标准的二分法题目,千万不要暴力遍历,那样很容易超时,在本题中,二分遍历找到目标target的一个位置,然后再左右遍历,找出所有target即可,如果没有的话返回0,代码如下:

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

以上是关于LeetCode 剑指Offer 53 - I 在排序数组中查找数字I[二分法] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode剑指 Offer(27)

LeetCode(剑指 Offer)- 53 - I. 在排序数组中查找数字 I

LeetCode 剑指Offer 53 - I 在排序数组中查找数字I[二分法] HERODING的LeetCode之路

剑指offer二分53-I. 在排序数组中查找数字

剑指offer二分53-I. 在排序数组中查找数字

剑指OFFER----面试题53 - I. 在排序数组中查找数字 I