【位运算】丢失的数字(easy)

34. 丢失的数字(easy)

  • 题⽬描述:
  • 方法一:排序
  • 解法(位运算):
    • C++ 算法代码:
    • Java 算法代码:

题⽬链接: 268. 丢失的数字

题⽬描述:

给定⼀个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
⽰例 1:
输⼊:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没
有出现在 nums 中。
⽰例 2:
输⼊:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没
有出现在 nums 中。
⽰例 3:
输⼊:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没
有出现在 nums 中。
⽰例 4:
输⼊:nums = [0]
输出:1
解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。
提⽰:
n == nums.length
1 <= n <= 10^4
0 <= nums[i] <= n
nums 中的所有数字都 独⼀⽆⼆
进阶:你能否实现线性时间复杂度、仅使⽤额外常数空间的算法解决此问题?

方法一:排序

一个简单的做法是直接对 nums 进行排序,找到符合 nums[i] =i 的位置即是答案,如果不存在 nums[i]=i 的位置,则 n 为答案。

class Solution {public int missingNumber(int[] nums) {Arrays.sort(nums);int n = nums.length;for (int i = 0; i < n; i++) {if (nums[i] != i) {return i;}}return n;}
}

复杂度分析
时间复杂度:O(nlogn),其中 n 是数组 nums 的长度。排序的时间复杂度是 O(nlogn),遍历数组寻找丢失的数字的时间复杂度是 O(n),因此总时间复杂度是 O(nlogn)。
空间复杂度:O(logn),其中 n 是数组 nums 的长度。空间复杂度主要取决于排序的递归调用栈空间。

解法(位运算):

算法思路:
异或
找缺失数、找出现一次数都是异或的经典应用。
我们可以先用 ret 对各个 nums[i] 进行异或,然后求得 [1,n] 的异或和 ans。
这样最终得到的异或和表达式中,只有缺失元素出现次数为 1 次,其余元素均出现两次(x⊕x=0),即最终答案 ans 为缺失元素。

C++ 算法代码:

class Solution
{
public:int missingNumber(vector<int>& nums) {int ret = 0;for(auto x : nums) ret ^= x;for(int i = 0; i <= nums.size(); i++) ret ^= i;return ret;}
}

Java 算法代码:

class Solution {public int missingNumber(int[] nums) {int ret = 0;for(int x : nums) ret ^= x;for(int i = 0; i <= nums.length; i++) ret ^= i;return ret;}
}

复杂度分析
时间复杂度:O(n),其中 n 是数组 nums 的长度。需要对 2n+1 个数字计算按位异或的结果。
空间复杂度:O(1)。

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

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

相关文章

如何通过RL真正提升大模型的推理能力?NVIDIA提出长期强化学习训练框架ProRL

原文&#xff1a;https://mp.weixin.qq.com/s/QLFKvb8Ol3CX9uWKBXSrow 论文&#xff1a;ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models Abs&#xff1a;https://arxiv.org/abs/2505.24864 权重下载&#xff1a;https://hugg…

ORM 框架的优缺点分析

ORM 框架的优缺点分析 一、ORM 框架概述 ORM(Object-Relational Mapping)是一种将关系型数据库与面向对象编程进行映射的技术框架。它通过将数据库表映射为编程语言中的类,将记录映射为对象,将字段映射为属性,实现了用面向对象的方式操作数据库。 核心价值:ORM 在数据库和…

1. 数据库基础

1.1 什么是数据库 ⭐ mysql 本质是一种网络服务, 是基于 C(mysql) S(mysqld)的 网络服务. 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库&#xff1f;文件保存数据存在以下缺点&#xff1a; 文件的安全性问题。文件不利于数据查询和管理。文件不利于存储海量数据。…

go语言学习 第5章:函数

第5章&#xff1a;函数 函数是编程中不可或缺的一部分&#xff0c;它封装了一段可重复使用的代码&#xff0c;用于执行特定的任务。在Go语言中&#xff0c;函数同样扮演着重要的角色。本章将详细介绍Go语言中函数的定义、调用、参数传递、返回值处理以及一些高级特性&#xff…

MapReduce 分布式计算模型

what&#xff1a;分解大数据集&#xff0c;并行处理&#xff0c;汇总结果&#xff08;分解组合思想&#xff09; 目的&#xff1a;SQL查询转换为MR&#xff0c;理解MR更好优化SQL 优点&#xff1a; 只需关注业务逻辑&#xff08;自定义函数map&#xff0c;reduce&#xff09…

RDMA简介3之四种子协议对比

RDMA协议共有四种子协议&#xff0c;分别为InfiniBand、iWARP、RoCE v1和RoCE v2协议。这四种协议使用统一的RDMA API&#xff0c;但在具体的网络层级实现上有所不同&#xff0c;如图1所示&#xff0c;接下来将分别介绍这四种子协议。 图1 RDMA四种子协议网络层级关系图 Infin…

LabelImg: 开源图像标注工具指南

LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具&#xff0c;使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一&#xff0c;支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费&#xff0c;并且跨平台支持 Windows、Lin…

系统架构设计论文

disstertation 软考高级-系统架构设计师-论文&#xff1a;论文范围&#xff08;十大知识领域&#xff09;、历年论题、预测论题及论述过程、论文要点、论文模板等。 —— 2025 年 4 月 4 日 甲辰年三月初七 清明 目录 disstertation1、论文范围&#xff08;十大核心领域&#x…

数学复习笔记 26

5.25&#xff1a;这题还是有点难度的。主要是出现了新的知识点&#xff0c;我现在还没有那么熟悉这个新的知识点。这块就是&#xff0c;假设一个矩阵可以写成一个列向量乘以一个行向量的形式&#xff0c;这两个向量都是非零向量&#xff0c;那么这个矩阵的秩等于一。这个的原理…

[Java 基础]注释

注释在编程中扮演着非常重要的角色&#xff0c;它们是写给人类阅读的&#xff0c;而不是给计算机执行的。良好的注释可以极大地提高代码的可读性和可维护性。 为什么需要注释&#xff1f; 提高可读性&#xff1a; 注释可以解释代码的功能、实现思路、特殊处理等&#xff0c;帮…

TortoiseSVN账号切换

SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 ​​下载地址​​&#xff1a;TortoiseSVN官网 ​​安装步骤​​&#xff1a; 双击安装包&#xff0c;按向导完成安装后&#x…

5分钟了解JVM运行时数据区域

点击蓝字&#xff0c;关注我们 在 Java 程序运行期间&#xff0c;JVM 会划分出几块重要的内存区域&#xff0c;用来支撑类加载、方法调用、对象分配、线程执行等一切运行时行为。 这些区域构成了 JVM 的“运行时数据区”。 一、运行时数据区域概览图 二、Java 堆&#xff08;H…

深入理解CSS浮动:从基础原理到实际应用

深入理解CSS浮动&#xff1a;从基础原理到实际应用 引言 在网页设计中&#xff0c;CSS浮动&#xff08;float&#xff09;是一个历史悠久却又至关重要的概念。虽然现代布局技术如Flexbox和Grid逐渐流行&#xff0c;但浮动仍然在许多场景中发挥着重要作用。本文将带你深入理解…

Spring Bean 为何“难产”?攻克构造器注入的依赖与歧义

本文已收录在Github&#xff0c;关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; &#x1f680; 魔都架构师 | 全网30W技术追随者&#x1f527; 大厂分布式系统/数据中台实战专家&#x1f3c6; 主导交易系统百万级流量调优 & 车联网平台架构&a…

华为云Flexus+DeepSeek征文|实战体验云服务器单机部署和CCE高可用的架构AI赋能

前引&#xff1a;“在数字化浪潮汹涌澎湃的今天&#xff0c;企业对云计算服务的需求已从基础架构支撑&#xff0c;逐步转向更深层次的AI赋能与业务创新驱动。面对复杂多变的市场环境&#xff0c;选择一个强大、可靠且具备前瞻性的云服务伙伴&#xff0c;无疑是企业实现高速增长…

雷卯针对易百纳G610Q-IPC-38E 模组防雷防静电方案

一、应用场景 1、智能监控 2、智能家居 3、工业自动化 4、机器人 5、智能交通 6、医疗影像 7、教育科研 二、 功能概述 1 HI3516CV610&#xff08;ARM Cortex-A7 MP2&#xff09; 2 AI算力 1Tops 3 模组集成 4M30FPS Sensor&#xff0c;支持最高 6M30fps 的 ISP 图像…

生成对抗网络(GAN)基础原理深度解析:从直观理解到形式化表达

摘要 本文详细解析 生成对抗网络&#xff08;GAN&#xff09; 的 核心原理&#xff0c;从通俗类比入手&#xff0c;结合印假钞与警察博弈的案例阐述生成器 与 判别器 的对抗机制&#xff1b;通过模型结构示意图&#xff0c;解析 噪声采样、样本生成 及判别流程&#xff1b;基于…

OptiStruct结构分析与工程应用:无限元法介绍

13.3 无限元方法 本节将详细阐述如何利用无限元方法求解外声场分析&#xff0c;具体包括无限元方法基本理论&#xff0c;无限单元介绍、无限元分析建模指南及检查&#xff0c;最后以一个实例讲解整个分析设置过程。 13.3.1 无限元分析基础理论 无限元求解外声场的基本原理如…

判断:有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈

这道题的关键在于理解递归转非递归与 “是否用栈” 的本质逻辑&#xff0c;和 “局部变量” 无关&#xff0c;核心看递归的调用上下文是否需要保存。 一、递归的本质&#xff1a;依赖 “调用栈” 递归函数执行时&#xff0c;系统会用调用栈保存&#xff1a; 每层递归的参数、…

leetcode1443. 收集树上所有苹果的最少时间-medium

1 题目&#xff1a;收集树上所有苹果的最少时间 官方标定难度&#xff1a;中 给你一棵有 n 个节点的无向树&#xff0c;节点编号为 0 到 n-1 &#xff0c;它们中有一些节点有苹果。通过树上的一条边&#xff0c;需要花费 1 秒钟。你从 节点 0 出发&#xff0c;请你返回最少需…