描述

给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数

进阶: 空间复杂度 O(1),时间复杂度 O(n)

数据范围:

-2^31<=nums[i]<=2^31-1

0<=len(nums)<=5*10^5

示例1

输入:

[1,0,2]

复制返回值:

3

复制

示例2

输入:

[-2,3,4,1,5]

复制返回值:

2

复制

示例3

输入:

[4,5,6,8,9]

复制返回值:

1

解题报告:

注意这题的关键信息,每个数字都各不相同,且len(nums)<=5*10^5

要求空间复杂度O(1)所以可以考虑复用原数组的空间。

首先从答案出发,考虑答案的可能范围,发现一定在[1,n+1],把不合法的值都归一化成-1。

然后因为各不相同,所以我们可以把每个不在对应位置上的都给他变到对应位置上。这个对应位置,可以约定为,x在nums[x-1]上,这样就可以保证[1,n]会在[0,n-1]位置上。

然后从小到大遍历,如果nums[i] != i+1,则 i 就是答案。

AC代码:

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @return int整型*/int minNumberDisappeared(vector<int>& nums) {// write code herefor(int i = 0; i<nums.size(); i++) {if(nums[i] <= 0 || nums[i] > int(nums.size())) nums[i] = -1;}for(int i = 0; i<nums.size(); i++) {if(nums[i] == -1) continue;int p = nums[i];while(p>0 && nums[p-1] != p) {int cur_num = nums[p-1];nums[p-1] = p;p = cur_num;}}for(int i = 0; i<nums.size(); i++) {if(nums[i] != i+1) return i+1;}return nums.size()+1;}
};
/*
从结果入手考虑,结果肯定在(1,len)之间*/

【NC30】缺失的第一个正整数相关推荐

  1. 如何表示数组所有数都不等于一个数_力扣刷题那些事儿(3)-缺失的第一个正整数(41)...

    问题描述 官网题目地址: 力扣​leetcode-cn.com 问题分析 典型的 "看起来很简单" 的题目,但再仔细看发现要求时间复杂度和空间复杂度要求就知道自己错了. 简单描述就 ...

  2. Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水

    维护公众号:bigsai ,回复进群加入打卡,回复bigsai分享一些学习资源! 上周第一次 LeetCode 36有效的数独&37解数独(八皇后问题) 上周第二次 LeetCode 38外观 ...

  3. 41. 缺失的第一个正数 golang

    41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3 ...

  4. Java实现 LeetCode 41 缺失的第一个正数

    41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...

  5. Leetcode算法Java全解答--41. 缺失的第一个正数

    Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...

  6. LeetCode--41.缺失的第一个正数(C)

    缺失的第一个正数(C) 1. 题目描述 2. 题目分析 3. C语言实现 3.1 申请额外空间实现 3.2 原数组实现 1. 题目描述 难度:困难 2. 题目分析 这道题本质上是很简单的,但是加上了这 ...

  7. 41. First Missing Positive 缺失的第一个正数

    Title 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [ ...

  8. Leetcode--41. 缺失的第一个正数

    给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11 ...

  9. 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]

    文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...

最新文章

  1. JDBC+Servlet+JSP整合开发之30-JDBC、Servlet、JSP的MVC
  2. 16进制魔术数字 0xdeadbeef Leet英文转写形式 简介
  3. 科大星云诗社动态20210518
  4. 共轭梯度法求解线性方程组
  5. 如何隐藏 video 元素的下载按钮
  6. 安卓开发替换json字符串中的数据_22个JavaScript开发技巧合集
  7. _declspec(naked) 使用
  8. 无奈!《花木兰》《速度与激情9》等多部影片宣布撤档
  9. 这些硬核公众号你知道几个?
  10. 弱电工程施工组织设计
  11. ubuntu下安装teamview
  12. Java 读取Excel ( xls 和 xlsx 格式 )
  13. 【Java基础】ArraylistLinkedList机制,failfastfailsafe
  14. Javascript 格式化json字符串
  15. java如何实现发布微博的功能_使用java调用新浪微博开发api进行通信
  16. MATLAB符号数学解非线性方程组 -- 眼球反射模型
  17. Java集合源码解析
  18. linux 文本行倒叙,Linux文本行倒序排列6种方法
  19. Swift--在 30 天内,从零开始学习 Swift
  20. 无屏电视:智能电视的终极形态?

热门文章

  1. HDOJ 1875 畅通工程再续
  2. LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”
  3. phpstudy使用(80端口被system占用,无法关闭和删除)
  4. linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数
  5. Linux高频命令汇总,Linux高频命令
  6. Android 同步锁死锁,Android多线程研究(3)——线程同步和互斥及死锁
  7. access vba代码大全_VBA 实践指南 -- VBA连接各种数据库
  8. efcore 实体配置_创建并配置模型
  9. 下列python语言、返回结果不是uc_MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c++程序语言作业代做...
  10. linux中将hdfs数据导入hbase,将数据文件导入到HBase中