力扣劍指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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章