数据结构学习 jz53_1 在排序数组中查找数字1 0 ~ n - 1 中缺失的数字

关键词:查找算法 二分法 映射 位运算

题目一:统计目标成绩的出现次数

方法一:我自己写的。[ 用时: 13 m 3 s ] 二分法+线性扫描

方法二:看了题解

方法一:

二分法+线性查找

思路:

先二分查找找到和target一样的数的位置,假设为i。

然后以i位置出发点,左右两边查找数据是否等于target。

复杂度计算:

时间复杂度O(logn+n)

空间复杂度O(1)

代码:

class Solution {
public:
    int countTarget(vector<int>& scores, int target) {
        int l=0;
        int r=scores.size()-1;
        while(l<=r)//二分查找
        {
            int mid=(l+r)/2;
            if(scores[mid]==target)
                break;
            else if(scores[mid]>target)
            {
                r=mid-1;
            }
            else//scores[mid]<target
            {
                l=mid+1;
            }
        }
        if(l>r)//找不到
        {
            return 0;
        }
        int tar_l=(l+r)/2;//左右线性查找
        while(tar_l>=0&&scores[tar_l]==target)
        {
            tar_l--;
        }
        int tar_r=(l+r)/2;
        while(tar_r<scores.size()&&scores[tar_r]==target)
        {
            tar_r++;
        }
        return tar_r-tar_l-1;
    }
};

方法二:

双二分法。

思路:

先用二分法找符合target这一堆数字的最左边。

然后再 二分法找符合target这一堆数字的最右边。

右-左+1就是结果。

复杂度计算:

时间复杂度O(logn)

空间复杂度O(1)

代码:

class Solution {
public:
    int countTarget(vector<int>& scores, int target) {
        if(scores.empty()) return 0;
        int tar_l=0;
        int tar_r=scores.size()-1;
        int l=0;
        int r=scores.size()-1;
        while(l<=r)//左
        {
            int mid=(l+r)/2;
            if(scores[mid]==target)
            {
                tar_l=mid;
                r=mid-1;
            }
            else if(scores[mid]>target)
            {
                r=mid-1;
            }
            else//scores[mid]<target
            {
                l=mid+1;
            }
        }
        if(scores[tar_l]!=target)
        {
            return 0;
        }
        l=0;
        r=scores.size()-1;
        while(l<=r)//右
        {
            int mid=(l+r)/2;
            if(scores[mid]==target)
            {
                tar_r=mid;
                l=mid+1;
            }
            else if(scores[mid]>target)
            {
                r=mid-1;
            }
            else//scores[mid]<target
            {
                l=mid+1;
            }
        }
        return tar_r-tar_l+1;
    }
};

题目二:点名

方法一:

[ 用时: 6 m 6 s ] 二分法 映射

思路:

映射法做。

映射:只要数字和下标不同,就说明这个数或者这个数之前的数缺了。

利用二分查找来找到我们想要的那个数。

复杂度计算:

时间复杂度O(logn)

空间复杂度O(1)

代码:

class Solution {
public:
    int takeAttendance(vector<int>& records) {
        int l=0,r=records.size()-1;
        while(l<=r)
        {
            int mid=(l+r)/2;
            if(records[mid]==mid)
            {
                l=mid+1;
            }
            else
            {
                r=mid-1;
            }
        }
        return l;
    }
};

方法二:

位运算 异或

只是炫技。时间上还不如二分。

思路:

如果两个数相同,异或为0,剩下的那个就是被单着的。

0,1,2,3,5和0,1,2,3,4,5异或,就会得到4了。

复杂度计算:

时间复杂度O(n)

空间复杂度O(1)

代码:

class Solution {
public:
    int takeAttendance(vector<int>& records) {
        if(records[0]!=0) return 0;
        int res=0;
        int i=0;
        for(const int&x:records)//0,1,2,3,5和0,1,2,3,4异或
        {
            res=res^i^x;
            i++;
        }
        return res^i;//别忘了最后一位5
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/324133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA开发设计

一、概述 FPGA是可编程逻辑器件的一种&#xff0c;本质上是一种高密度可编程逻辑器件。 FPGA的灵活性高、开发周期短、并行性高、具备可重构特性&#xff0c;是一种广泛应用的半定制电路。 FPGA的原理 采用基于SRAM工艺的查位表结构&#xff08;LUT&#xff09;&#xff0c;…

15 万奖金!开放原子开源大赛 OpenAnolis -云原生赛题报名开始

开放原子开源基金会牵头发起的首届“开放原子开源大赛”&#xff0c;旨在联合开源组织、企事业单位、高等院校、科研院所、行业组织、投融资机构等多方资源&#xff0c;充分发挥产业链生态上下游的协同能力&#xff0c;基于开源共享、共建共治的原则共同举办。大赛搭建面向全球…

LaTeX 章节的使用

目录 1、介绍 2、章节的等级 3、取消编号章节 4、章节引用 1、介绍 命令\section{}标志着一个新章的开始&#xff0c;大括号内的文字为章的标题。章的编号是自动生成的&#xff0c;你也可以使用没有编号的章。 \documentclass[]{article}\begin{document}\section{Introd…

Kubernetes (十三) 存储——持久卷-动静态分配

一. 简介 二. NFS持久化存储步骤&#xff08;静态分配&#xff09; 1. 集群外…

python中小数据池和编码

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 ⼀. 小数据池 在说小数据池之前. 我们先看⼀个概念. 什么是代码块: 根据提示我们从官⽅⽂档找到了这样的说法&#xff1a; A Python program is constructed from code blocks. A block is a piece of Python program text…

腾讯云服务器租用价格表_2024新版报价

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

2024年腾讯云新用户优惠云服务器价格多少?

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

Ubuntu20.04安装配置OpenCV-Python库并首次执行读图

一、选择三方提供的预编译包安装&#xff1a; 可以从官网下载 OpenCV 的安装包&#xff0c;编译后使用&#xff1b;也可以直接使用第三方提供的预编译包 安装。显然后者不需要执行编译步骤&#xff0c;更便捷。选择由 PyPI 提供的 OpenCV 安装包&#xff0c;可以在 https://py…

排序——计数排序

文章目录 概念思路绝对映射&#xff1a;相对映射 代码实现特性结果演示 概念 计数排序是一个非基于比较的排序算法&#xff0c;该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时&#xff0c;它的复杂度为Ο(nk)&#xff08;其中k是整数的范围…

基于springboot书籍学习平台源码和论文

首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

2024年腾讯云服务器多少钱1年?超便宜62元一年

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

Zung氏抑郁自评量表SDS

抑郁症是常见的心理障碍&#xff0c;其症状表现为&#xff1a;心境低落、思维迟缓、意志活动减退、认知功能损害、躯体症状等。在生活中常有悲观消沉&#xff0c;灰心丧气&#xff0c;对所有事情都提不起兴趣&#xff0c;严重的还会出现肢体僵硬和耳鸣等症状。 部分人有明显的…

Lede(OpenWrt)安装和双宽带叠加

文章目录 一、Lede介绍1. 简介2. 相关网站 二、Lede安装1. 编译环境2. SHELL编译步骤3. 腾讯云自动化助手 三、Lede配置1. 电信接口配置2. 联通接口配置3. 多线多播配置4. 网速测试效果 一、Lede介绍 1. 简介 LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。 …

哈希(hash)

目录 一、什么是哈希 二、哈希冲突 三、哈希函数 3.1、哈希函数设计原则 3.2、常见的哈希函数 四、哈希冲突解决 4.1、闭散列 4.2、开散列 五、哈希表的模拟实现 5.1、哈希表的功能模拟实现 5.2、测试模拟实现&#xff1a; 一、什么是哈希 如果构造一种存储结构&…

启动Vue项目,报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

前言&#xff1a; 最近在打开一个Vue项目的时候&#xff0c;打开之后输入命令行&#xff1a;npm run serve之后发现&#xff0c;报错&#xff1a;vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序&#xff0c;以下是解决方案&#xff1a; 报错图片截图&…

Day30 78子集 90子集II 491非递减子序列

78 子集 给定一组不含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入: nums [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 注意…

Spring Boot异常处理

自定义错误页面 SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求&#xff0c;然后跳转到默认…

RK3568笔记九: DRM显示摄像头

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 学习DRM的目的是想做类似NVR显示多路实时流&#xff0c;通过勇哥&#xff08;Marc)的指导&#xff0c;大概流程是通过Zlmedia拉流&#xff0c;RK3568的MPP解码,DRM显示&#xff0c;可以使用HDMI或DIS屏幕&#xf…

jmeter--5.断言

目录 1. 响应断言 1.1 添加断言 1.2 名词解释 断言失败显示示例 2. json断言 2.1 添加断言 2.2 名词解释 断言失败显示示例 2.3 json断言应用 3. beanshell断言 3.1 添加断言 3.2 原理 断言失败显示示例 1. 响应断言 1.1 添加断言 线程组->添加->断言->…

Zynq7020 使用 Video Processing Subsystem 实现图像缩放

1、前言 没玩过图像缩放都不好意思说自己玩儿过FPGA&#xff0c;这是CSDN某大佬说过的一句话&#xff0c;鄙人深信不疑。。。 目前市面上主流的FPGA图像缩放方案如下&#xff1a;1&#xff1a;Xilinx的HLS方案&#xff0c;该方案简单&#xff0c;易于实现&#xff0c;但只能用…