剑指 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);
    }
};
相关文章
|
2月前
|
存储 搜索推荐 C++
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
本文是作者针对《剑指 Offer(第 2 版)》中 "数组中重复的数字" 问题的刷题记录,分享了使用排序算法和相邻比较大小两种方法来找出数组中的重复数字,并提供了C++的实现代码。
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
|
6月前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
27 0
|
6月前
剑指 Offer 56 - II:数组中数字出现的次数 II
剑指 Offer 56 - II:数组中数字出现的次数 II
48 0
|
6月前
剑指 Offer 56 - I:数组中数字出现的次数
剑指 Offer 56 - I:数组中数字出现的次数
48 0
|
6月前
剑指 Offer 04:二维数组中的查找
剑指 Offer 04:二维数组中的查找
31 0
|
6月前
剑指 Offer 38:字符串的排列
剑指 Offer 38:字符串的排列
46 0