算法:LCR 173. 点名 (原:剑指 offer:0~n-1 中缺失的数字 )

news2024/11/6 9:41:01

题目

链接:leetcode链接

在这里插入图片描述

思路分析(一题多解)

思路一:高斯求和公式

利用高斯求和公式求出0~n的和,然后减去nums数组中的每一个数,最后的结果就是缺失的数字

时间复杂度,O(N)
过于简单,就不写代码了


思路二:差分

求出每一个元素与前一个元素的差,然后哦遍历这个差,当发现差值不等于1的时候,就返回该位置的值即可。

细节:要特殊处理一下缺失0的情况。

时间复杂度,O(N)

 int takeAttendance(vector<int>& records) {
        int n = records.size();
        if(records[0] != 0)return 0;

        vector<int> dp(n);
        int  i = 0;
        for( i = 1;i < n;i++)
        {
            dp[i] = records[i] - records[i - 1];
            if(dp[i] != 1)
            break;
        }
        
        return i;
    }

思路三:位运算

采用按位异或的操作,相同为0,不同为1
将0~n的所有数字均与nums中的数字按位异或一下,最后的结果就是缺失的数字

时间复杂度O(N)

int takeAttendance(vector<int>& records) {
        int tmp = 0;
        int n = records.size();
       for(int i = 1;i <= n;++i)
       {
        tmp^=i;
       }

        for(int i = 0;i < records.size();++i)
        {
            tmp^=records[i];
        }

        return tmp;
    }

思路四:二分算法

注意了,这是因为题目特殊,题目是有序的情况下,才能存在这种二段性,否则要先排序

如何寻找这个二段性?

我们可以发现,当有序的序列缺失了一个元素之后
在缺失元素之前的每一个元素都和下标相等,
而缺失元素之后的每一个元素都比下标大。

根据这个二段性,我们就可以使用二分算法了。
还是寻找左边界的二分。

细节:

while(left < right) // 不能取等,否则会死循环
mid = left + (right - left) / 2;
left = mid + 1;
right = mid;
如果缺失的元素是最后一个数据的话,需要特判

时间复杂度O(logN)

int takeAttendance(vector<int>& records) {
        int left = 0,right = records.size() - 1;

        while(left < right)
        {
            int mid = left + (right - left) / 2;
            if(records[mid] == mid) left = mid + 1;
            else right = mid;
        }

        if(left == records[left]) return left + 1;
        
        return left;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx:反向代理服务器——一个非常强大且灵活的工具

Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;常用于 Web 服务器、负载均衡器和反向代理。它以其高性能、稳定性、丰富的功能集、简单的配置文件和低资源消耗而著称。在部署 Web 应用程序时&#xff0c;Nginx 常被用来处理静态文件、反向代理动态内容、负载均衡等任…

AI大模型面试大纲

大纲 1. 介绍和背景 自我介绍&#xff08;5分钟&#xff09; 了解候选人的教育背景、工作经历和对大模型架构的兴趣。 2. 基础理论和概念&#xff08;30分钟&#xff09; 机器学习基础 解释基本概念&#xff0c;如监督学习、无监督学习和强化学习。 讨论不同的模型类型&#xf…

UG NX二次开发(C#)-建模-根据拉伸体获取草图对象

文章目录 1、前言2、在UG NX中创建基于草图的拉伸对象2.1 在建模模块中进入草图环境2.2 创建拉伸特征2.3 分析拉伸特征父项3 实现代码3.1 基于NXOpen实现3.2 UFun函数实现3.3 效果1、前言 今天在QQ群中,有个群友咨询了根据拉伸体获取草图对象,我今天难得清闲一次,就讲一下吧…

JQuery基本介绍和使用方法

JQuery基本介绍和使用方法 W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: ⽹⻚内容⽹⻚结构⽹⻚样式 但是原⽣的JavaScript提供的API操作DOM元素时, 代码⽐较繁琐, 冗⻓. 我们可以使⽤JQuery来操作⻚⾯对象. jQuery是⼀个快速、简洁且功能丰富的JavaScript框架, 于20…

这几种文件找回方法你都知道吗?

一、基础方法 检查回收站 无论是Windows系统还是Mac系统&#xff0c;回收站&#xff08;或废纸篓&#xff09;都是文件被删除后的默认存放位置。可以打开回收站&#xff0c;查看是否有误删的文件&#xff0c;并右键单击选择“还原”来恢复。利用文件历史记录或备份 Windows系统…

GDAL Unable to open EPSG support file gcs.csv

python环境从3.6升级到3.7&#xff0c;gdal版本从2.2.4升级到3.4.1之后&#xff0c;执行原来的gdal脚本&#xff0c;结果报出如下错误 ”ERROR 4: Unable to open EPSG support file gcs.csv. Try setting the GDAL_DATA environment variable to point to the directory conta…

CMake教程(八):添加定制命令和生成的文件

本篇继续 CMake 官网教程的第八篇教程&#xff0c;所用材料是 Step8 目录下的源代码。 本篇教程主要讲解如何通过 CMake 生成一个头文件&#xff0c;该头文件当中包含了 1 到 10 的平方根表格&#xff0c;然后在程序的其它部分包含这个生成的头文件。 出于教学的目的&#xf…

氨基酸在PDB文件中的原子命名规则

氨基酸在PDB文件中的原子命名规则 氨基和羧基上的原子都采用本名&#xff0c;C, N, O, H, etc. 其它原子除 H 外&#xff0c;所有原子命名均采用“原子名后缀[编号]”形式。整体命名方法类似于图论中求解最大流问题时所采用的标号法。首先α-C被命名为CA。其后按照成键关系逐级…

推荐一个可以把PDF样本册转换为翻页电子书的网站

​随着互联网的普及&#xff0c;越来越多的企业和个人开始意识到线上展览的重要性。如何将实体样本册转化为线上版本&#xff0c;让更多人了解和欣赏自己的产品与服务&#xff1f; 一、网站简介 这款PDF样本册免费上传网站名为“FLBOOK”&#xff0c;致力于为广大用户提供便捷…

书生大模型实战(从入门到进阶)L3-彩蛋岛-InternLM 1.8B 模型 Android 端侧部署实践

目录 1 环境准备 1.1 安装rust 1.2 安装Android Studio 1.3 设置环境变量 2 转换模型 2.1 安装mlc-llm 2.2 (可选)转换参数 2.3 (可选)生成配置 2.4 (可选)上传到huggingface 2.5 (可选) 测试转换的模型 3 打包运行 3.1 修改配置文件 3.2 运行打包命令 3.3 创建签…

Parallels Desktop19官方中文版10月最新

如何使用 Parallels Desktop 在 Mac 上运行虚拟机 Parallels Desktop 是一款强大的虚拟机软件&#xff0c;允许 Mac 用户在 macOS 上方便地运行 Windows 和其他操作系统。这款软件尤其适合开发者、设计师以及任何需要使用不同操作系统的用户。本文将为新手用户提供一步一步的指…

EthernetIP IO从站设备数据 转profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关采集ETHERNETIP IO数据 2 5 用PROFINET IO协议转发数据 4 6 从设备的的EDS文件获取参数信息 7 7 案例总结 9 1 案例说明 设置网关采集EthernetIP IO设备数据把采集的数据转成profinet IO协议转发给其他系统。 2…

可视耳勺方便吗?双十一质量最好的可视挖耳勺推荐

相信大家掏耳的时候完全依赖我们的感觉和经验&#xff0c;我们无法直接看到耳道内部的情况。这就如同在黑暗中摸索&#xff0c;极易造成意外伤害。稍有不慎&#xff0c;就可能刮伤耳道娇嫩的皮肤&#xff0c;导致耳道出血、感染&#xff0c;引发炎症。更严重的可能会导致听力下…

Linux驱动开发(速记版)--平台总线

第四十七章 平台总线模型介绍 47.1 什么是平台总线&#xff1f; 平台总线是Linux内核中的一种虚拟机制&#xff0c;用于连接和匹配平台设备与对应的平台驱动。它简化了设备与驱动之间的绑定过程&#xff0c;提高了系统对硬件的适配性和扩展性。 当设备或驱动被注册时&#xff…

Java 如何从图片上提取文字

生活中我们可能会遇到想从图片上直接复制上边的文字&#xff0c;该如何获取呢&#xff0c;接下来看看如何使用Java程序实现从图片中读取文字。 实现过程 1、引入Tess4J 依赖 <!--Tess4J 依赖--> <dependency><groupId>net.sourceforge.tess4j</groupId…

AI绘画助手,对比总结出这六款

AI绘画助手&#xff0c;AI绘画助手近年来在艺术创作领域中逐渐崭露头角&#xff0c;成为许多艺术家和设计师的新宠。随着人工智能技术的飞速发展&#xff0c;这些工具不仅提高了创作效率&#xff0c;还为用户带来了前所未有的创意体验。下文将介绍六款简单好用的AI绘画助手&…

主成分分析法

主成分分析法 1. 基础知识1.1 向量1.1.1 样本均值1.1.2 向量投影 1.2 矩阵1.2.1 矩阵微分1.2.2 矩阵特征值和特征向量1.2.2.1 特征值和特征向量的几何意义1.2.2.2 特征向量与矩阵变换的关系1.2.2.3 特征值与矩阵的迹 1.3 Lagrange乘子法1.3.1 等式约束优化问题 2. 主成分分析法…

【JavaScript】LeetCode:56-60

文章目录 56 路径总和Ⅲ57 二叉树的最近公共祖先58 二叉树中的最大路径59 岛屿数量60 腐烂的橘子 56 路径总和Ⅲ 递归遍历每个节点所有可能的路径。pathSum()&#xff1a;返回所有节点满足条件的路径数目&#xff0c;traversal()&#xff1a;返回当前遍历节点满足条件的路径数目…

鸿蒙开发(NEXT/API 12)【状态查询与订阅】手机侧应用开发

注意 该接口的调用需要在开发者联盟申请设备基础信息权限与穿戴用户状态权限&#xff0c;穿戴用户状态权限还需获得用户授权。 实时查询穿戴设备可用空间、电量状态。订阅穿戴设备连接状态、低电量告警、用户心率告警。查询和订阅穿戴设备充电状态、佩戴状态、设备模式。 使…

基于Apache和Tomcat的负载均衡实验报告

说明&#xff1a;本实验为浙江科技大学软件工程本科专业课程《软件体系结构》的实验报告。 五、总结 负载均衡的基础是集群&#xff0c;集群就是一组连在一起的计算机&#xff0c;从外部看它是一个系统&#xff0c;各节点可以是不同的操作系统或不同的硬件构成的计算机。负载…