前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【每日一题】【leetcode】11. 数组-在排序数组中查找数字

【每日一题】【leetcode】11. 数组-在排序数组中查找数字

作者头像
aneutron
发布于 2022-08-10 06:04:47
发布于 2022-08-10 06:04:47
1K00
代码可运行
举报
文章被收录于专栏:闲余说闲余说
运行总次数:0
代码可运行

题目

统计一个数字在排序数组中出现的次数。 难易程度:easy

示例 1:

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

示例 2:

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

限制:

0 <= 数组长度 <= 50000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

分析

本题是一个典型的查找问题。根据题意可以提取两点信息:

  1. 数组本身是有序的
  2. 需要输出target出现的次数

因此,本题转换成查找边界问题:

  1. target第一次出现的位置
  2. target最后一次出现的位置

时间复杂度:O(logN) 空间复杂度:O(1)

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int search(vector<int>& nums, int target) {
        // 查找target第一次出现的位置
        int left = 0, right = nums.size();
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;// 保证nums[left]始终小于target
            } else {
                right = mid;
            }
        }
        if (left == nums.size() ||right < left) {
            return 0;
        }
        int start = left;
        
        // 查找target最后一次出现的位置的下一个位置
        right = nums.size();
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] <= target) {
                left = mid + 1; // 保证nums[left]最终是target最后一次出现的下一个位置或者数组的尾的下一个位置
            } else {
                right = mid;
            }
        }
        return left - start;
        
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 闲余说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
剑指 Offer 03. 数组中重复的数字
思路很简单啊,我们只需要遍历一遍数组,然后遇到重复的数字就结束遍历返回结果。我们需要使用集合来存放遍历时出现的数字,如果遍历时发现数字已经出现在集合中,则这个数字是重复数字。
Regan Yue
2023/02/13
2470
剑指 Offer 03. 数组中重复的数字
剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
Michael阿明
2020/07/13
2720
【刷题】 二分查找入门
总有一天,你会站在最亮的地方,活成自己曾经渴望的模样—— 苑子文 & 苑子豪《我们都一样 年轻又彷徨》
叫我龙翔
2024/04/02
1260
【刷题】 二分查找入门
【剑指offer:在排序数组中查找数字】搜索左右边界:从两边向中间、二分查找
二分查找一般用来查找数字在有序数组中是否出现过。进一步想,它可以用来不断在子序列中搜索对应数字。所以,我们就可以用它来向左边子序列中不断搜索,确认左边界;同样的思路,确认右边界。
心谭博客
2020/04/21
1.6K0
剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
类似题目:LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
Michael阿明
2020/07/13
9140
剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
【每日一题】【leetcode】8. 数组-数组中重复的数字
找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 难易程度:easy
aneutron
2022/08/10
1970
【每日一题】【leetcode】12. 数组-0~n-1中缺失的数字
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 难易程度:easy
aneutron
2022/08/10
3070
【每日一题】【leetcode】21. 序列-和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 难易程度:easy
aneutron
2022/08/10
2080
【每日一题】【leetcode】25. 数组-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 难易程度:easy
aneutron
2022/08/10
1680
那些年刷力扣遇到的坑:众数问题
该方法利用快排中 partition 操作查找中位数,即根据 partition 操作数的 index 判断是否为中位数,循环:若 index == len/2即为中位数,结束循环;index < len/2 时,中位数在 index 右边,将 begin = index+1,继续 partition;index > len/2 时,中位数在 index 左边,将 end = index-1,继续 partition,直到循环结束。根据中位数统计出现次数,判断是否为众数。
用户7257200
2020/05/19
3260
LeetCode刷题记录:剑指 Offer 03. 数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
英雄爱吃土豆片
2020/10/29
2770
LeetCode刷题记录:剑指 Offer 03. 数组中重复的数字
【每日一题】【leetcode】9. 数组-二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 难易程度:easy
aneutron
2022/08/10
2400
LeetCode通关:通过排序一次秒杀五道题,舒服!
大家好,我是拿输出博客督促自己刷题的老三,前面学习了十大排序:万字长文|十大基本排序,一次搞定!,接下来我们看看力扣上有没有什么能拿排序解决的题目吧!
三分恶
2021/09/10
8870
LeetCode通关:通过排序一次秒杀五道题,舒服!
【leetcode刷题】T8-在排序数组中查找元素的第一个和最后一个位置
今天分享leetcode第8篇文章,也是leetcode第34题—Find First and Last Position of Element in Sorted Array(在排序数组中查找元素的第一个和最后一个位置),地址是:https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
木又AI帮
2019/07/17
5210
​LeetCode刷题实战34:在排序数组中查找元素的第一个和最后一个位置
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
1.2K0
剑指offer | 面试题3:二维数组的查找
往期推荐 干货 | 手撕十大经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 面试题3: 二维数组中的查找 “题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的个二维数组和一个整数,判断数组中是否含有该整数。 “leetcode:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/submissio
千羽
2021/12/29
2030
剑指offer | 面试题3:二维数组的查找
二分问题-LeetCode 33、34(上下边界,二分查找)
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
算法工程师之路
2019/09/19
9660
LeetCode-面试题53-1-在排序数组中查找数字I
在有序的数组中二分查找,确定第一个k出现的位置和最后一个k出现的位置,然后两个位置相减即是出现次数
benym
2022/07/14
5700
【leetcode刷题】 20T19-在排序数组中查找元素的第一个和最后一个位置
https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
木又AI帮
2020/02/25
3450
LeetCode通关:数组十七连,真是不简单
数组基本上是我们最熟悉的数据结构了,刚会写“Hello World”不久,接着就是“杨辉三角”之类的练习。
三分恶
2021/08/10
3960
推荐阅读
相关推荐
剑指 Offer 03. 数组中重复的数字
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验