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

题目描述

 

解法一

思路:遍历数组查找是否有相同数字,相同则count++

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int count = 0;
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] == target){
                count++;  
            } 
        }
        return count;
    }
};

 

解法二

思路:二分法,由于数组已经排序,因此整个数组是单调递增的,我们可以利用二分法来加速查找的过程。

找到数组中第一个等于target的位置(left)第一个大于target的位置-1 (right),target在数组中出现的次数为 right-left+1

 

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

 

posted @ 2023-02-28 21:54  盏茶  阅读(16)  评论(0)    收藏  举报