首页 > 其他分享 >二分查找:剑指 Offer 53 - I. 在排序数组中查找数字 I

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

时间:2023-04-21 10:33:29浏览次数:35  
标签:right target nums int 复杂度 Offer 53 查找 数组

题目描述:

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

 

提示:

  •0 <= nums.length <= 105
  •-109 <= nums[i] <= 109
  •nums 是一个非递减数组
  •-109 <= target <= 109

 

解题思路:
排序数组中的搜索问题,首先想到 二分法 解决。

排序数组 nums 中的所有数字 target 形成一个窗口,记窗口的 左 / 右边界 索引分别为 left 和 right ,分别对应窗口左边 / 右边的首个元素。

本题要求统计数字 target 的出现次数,可转化为:使用二分法分别找到 左边界 left 和 右边界 right ,易得数字 target 的数量为 right - left - 1 。

 

 

 

复杂度分析:
  • 时间复杂度 O(logN) : 二分法为对数级别复杂度。
  • 空间复杂度 O(1) : 几个变量使用常数大小的额外空间。

 

 

class Solution{
    public int search(int nums[],int target){
        // 搜索右边界 right
        int i=0,j=nums.length-1;
        while(i<=j){
            int m = (i+j)/2;
            if(nums[m]<=target) i=m+1;
            else j=m-1;
        }
        int right=i;
        // 若数组中无 target ,则提前返回
        if(j>=0&&nums[j]!=target) return 0;
        // 搜索左边界 right
        i=0;j=nums.length-1;
        while(i<=j){
            int m=(i+j)/2;
            if(nums[m]<target) i=m+1;
            else j=m-1;
        }
        int left=j;
        return right-left-1;
    }
}

 

标签:right,target,nums,int,复杂度,Offer,53,查找,数组
From: https://www.cnblogs.com/zhz123567/p/17339456.html

相关文章

  • 折半查找
    问题描述:  N个有序整数数列已放在一堆数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下表值,反之则输出“Notbefound!”  1.定义一个最低值位数low=0,定义一个最高值位数high=N-1;  2.当low<=high时计算mid=(low+high)/2;  3.如果要找的值m......
  • 剑指offer刷题 进度:JZ8
    题目列表https://www.nowcoder.com/ta/coding-interviewsJZ3数组中重复的数字时间空间复杂度都为\(O(n)\),直接建一个数组a,初始化全0,出现数i就a[i]++intduplicate(vector<int>&numbers){constintN=10005;vector<int>count(N,0);for......
  • 二分查找
    给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例 2:输入:nums=[-1,0,3,5,9,......
  • 查找80端口请求数最高的前20个IP
    有时候业务的请求量突然上去了,那么这个时候我们可以查看下请求来源IP情况,如果是集中在少数IP上的,那么可能是存在攻击行为,我们使用防火墙就可以进行封禁。命令: netstat-anlp|grep80|greptcp|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|h......
  • 华为 S53300-配置链路聚合
    1、多个端口配置接入类型,并加入到vlan[Quidway]port-group1[Quidway-port-group-1]group-memberGigabitEthernet0/0/1toGigabitEthernet0/0/22[Quidway-port-group-1]portlink-typeaccess[Quidway-port-group-1]portdefaultvlan100[Quidway-port-group-1]display......
  • P5322 BJOI2019 排兵布阵
    P5322BJOI2019排兵布阵本题主要考察对模型的转化能力。首先要察觉两条性质:对于一个城堡,想打败一个玩家的同时用最少的士兵,肯定是正好派出这个玩家在这个城堡派出的士兵数量的二倍加一名士兵。在一个城堡上,打败了一个在这个城堡派出士兵数量为\(x\)的玩家,就可以顺便打败所......
  • 二分查找:剑指 Offer 11. 旋转数组的最小数字
    题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2]为[1,2,3,4,5]的一次旋转,该数组的最......
  • 选择排序和二分查找
    选择排序 二分查找 ......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    目录一、基础知识-二分法解题思路-数组中删除的思路二、题目一:704.二分查找三、题目二:27.移除元素一、基础知识1.二分法解题思路要求数组必须是有序排列,仅需要根据题目的条件去确定搜索区间。第一个关键点:区间的取值。一般有左闭右闭,左闭右开,左开右闭三种,这个的选择......
  • 704. 二分查找(leetcode)
    https://leetcode.cn/problems/binary-search/简单二分classSolution{public:intsearch(vector<int>&nums,inttarget){intl=0,r=nums.size()-1;while(l<r){intmid=l+r>>1;if(nums[mid]......