力扣剑指Offer:53 - I. 在排序数组中查找数字 I ——使用二分法,极速解决!

解题思路

一眼看到这道题就用二分啊,C++不多说,直接看代码注释

image.png

Python用了作弊方法,直接调用列表内置函数统计(.count()

image.png

代码

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1, mid, sum = 0, i;
        // 左边界、右边界和中间值定义;sum是统计变量,i是循环变量,刚开始打算用C写的,结果后来转到C++了
        while (left <= right)
        { //二分开始
            mid = (left + right) / 2;
            if (nums[mid] < target) left = mid + 1;
            else if (nums[mid] > target) right = mid - 1;
            else break; //如果找到直接退出,可能right和left不是卡死边界,但是可以适当的缩小范围
        }
        i = left; //附最左值
        for (; i <= right; i++) //在一定范围内查找target
        {
            if (nums[i] == target)
                sum++;
        }
        return sum;
    }
};
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        c = nums.count(target)
        return c
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章