当前位置: 首页 > news >正文

LeetCode 448.找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

示例 1:

输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
示例 2:

输入:nums = [1,1]
输出:[2]

提示:

n == nums.length
1 <= n <= 105^55
1 <= nums[i] <= n
进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。

我们可以遍历nums,把遍历到的元素按1到n放到指定为止,具体做法是把当前遍历到的下标为i的元素nums[i]与下标为nums[i] - 1位置的元素交换,如果发现目标位置和源位置的值相同,说明目标位置已经是该值了,此时将该值置为-1,最后下标为-1的值就是数组中消失的数字:

class Solution {
public:vector<int> findDisappearedNumbers(vector<int>& nums) {int n = nums.size();for (int i = 0; i < n; ) {if (nums[i] == -1) {++i;continue;}if (nums[i] - 1 == i) {++i;continue;}if (nums[i] != nums[nums[i] - 1]) {swap(nums[i], nums[nums[i] - 1]);} else {nums[i] = -1;++i;}}vector<int> ans;for (int i = 0; i < n; ++i) {if (nums[i] == -1) {ans.push_back(i + 1);}}return ans;}
};

如果nums的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

http://www.xdnf.cn/news/1350973.html

相关文章:

  • Ubuntu通过 systemd 管理 gpt4free,需为其创建 g4f.service 文件,定义服务的启动、停止等操作(未实践)
  • 97. 小明逛公园,Floyd 算法,127. 骑士的攻击,A * 算法
  • SQL注入1----(sql注入原理)
  • csrf漏洞学习笔记
  • 【KO】前端面试三
  • RobotFramework介绍与使用
  • 改华为智能插座为mqtt本地控制
  • 计算机视觉工程师业务场景题:智能推荐视频封面
  • ros 消息类型与查阅相关内容
  • Redis面试精讲 Day 28:Redis云原生部署与Kubernetes集成
  • 鸿蒙中CPU活动分析:CPU分析
  • Java—— 动态代理
  • 【Linux网络编程】分布式Json-RPC框架 - 项目设计
  • UAD详解
  • BEVDepth
  • 领码方案:新一代页面权限体系全景解析(完整版)
  • 英伟达显卡GPU驱动的本质
  • 在WSL2 Ubuntu中部署FastDFS服务的完整指南
  • 【K8s】整体认识K8s--K8s架构与集群创建过程
  • GRS认证是国际供应链的“硬性门槛“
  • 数据库字段类型深度解析:从关系型到 NoSQL 的全面指南
  • 自动化运维Ansible
  • 强光干扰与密集场景下工服识别准确率↑89%!陌讯多模态融合算法在安全生产中的实战优化
  • 在Excel和WPS表格中快速插入多行或多列
  • 一个适用于 Word(Mac/Win 通用) 的 VBA 宏:把所有“上角标格式的 0‑9”以及 “Unicode 上角标数字 ⁰‑⁹” 批量删除。
  • PYTHON让繁琐的工作自动化-列表
  • 构建现代高并发服务器:从内核机制到架构实践
  • Win11 下卸载 Oracle11g
  • 青少年机器人技术(五级)等级考试试卷(2020年9月)
  • 基于Python对酷狗音乐排行榜数据分析可视化【源码+LW+部署】