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

简介: 剑指 Offer 53 - I:在排序数组中查找数字 I

题目

题目链接

统计一个数字在排序数组中出现的次数。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

解题

方法一:暴力

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int res=0;
        for(int num:nums){
            if(num==target) res++;
        }
        return res;
    }
};

方法二:二分查找

参考链接

对于left=mid+1,right=mid-1, if(nums[mid]<=target)这样子的写法

比如 nums = [5,7,7,8,8,10],要查找target=8

left会到10,right会到最右边那个8,然后中止循环。

因此比如 nums = [5,7,7,8,8,10],要查找target=8,利用helper(nums,target)-helper(nums,target-1),

第一个返回值为5,第二个返回值为3

class Solution {
public:
    int helper(vector<int>& nums,int target){
        int left=0,right=nums.size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(nums[mid]<=target) left=mid+1;
            else right=mid-1;
        }
        return left;
    }
    int search(vector<int>& nums, int target) {
        return helper(nums,target)-helper(nums,target-1);
    }
};
相关文章
|
3天前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
13 0
|
3天前
剑指 Offer 38:字符串的排列
剑指 Offer 38:字符串的排列
23 0
|
3天前
剑指 Offer 56 - I:数组中数字出现的次数
剑指 Offer 56 - I:数组中数字出现的次数
19 0
|
3天前
剑指 Offer 56 - II:数组中数字出现的次数 II
剑指 Offer 56 - II:数组中数字出现的次数 II
22 0
|
3天前
剑指 Offer 04:二维数组中的查找
剑指 Offer 04:二维数组中的查找
18 0
|
3天前
剑指 Offer 50:第一个只出现一次的字符
剑指 Offer 50:第一个只出现一次的字符
20 0
|
3天前
剑指Offer LeetCode 面试题53 - I. 在排序数组中查找数字 I
剑指Offer LeetCode 面试题53 - I. 在排序数组中查找数字 I
20 0
图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I
图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I
64 0