【NC30】缺失的第一个正整数
描述
给定一个无重复元素的整数数组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】缺失的第一个正整数相关推荐
- 如何表示数组所有数都不等于一个数_力扣刷题那些事儿(3)-缺失的第一个正整数(41)...
问题描述 官网题目地址: 力扣leetcode-cn.com 问题分析 典型的 "看起来很简单" 的题目,但再仔细看发现要求时间复杂度和空间复杂度要求就知道自己错了. 简单描述就 ...
- Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水
维护公众号:bigsai ,回复进群加入打卡,回复bigsai分享一些学习资源! 上周第一次 LeetCode 36有效的数独&37解数独(八皇后问题) 上周第二次 LeetCode 38外观 ...
- 41. 缺失的第一个正数 golang
41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3 ...
- Java实现 LeetCode 41 缺失的第一个正数
41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...
- Leetcode算法Java全解答--41. 缺失的第一个正数
Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...
- LeetCode--41.缺失的第一个正数(C)
缺失的第一个正数(C) 1. 题目描述 2. 题目分析 3. C语言实现 3.1 申请额外空间实现 3.2 原数组实现 1. 题目描述 难度:困难 2. 题目分析 这道题本质上是很简单的,但是加上了这 ...
- 41. First Missing Positive 缺失的第一个正数
Title 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [ ...
- Leetcode--41. 缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11 ...
- 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]
文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...
最新文章
- JDBC+Servlet+JSP整合开发之30-JDBC、Servlet、JSP的MVC
- 16进制魔术数字 0xdeadbeef Leet英文转写形式 简介
- 科大星云诗社动态20210518
- 共轭梯度法求解线性方程组
- 如何隐藏 video 元素的下载按钮
- 安卓开发替换json字符串中的数据_22个JavaScript开发技巧合集
- _declspec(naked) 使用
- 无奈!《花木兰》《速度与激情9》等多部影片宣布撤档
- 这些硬核公众号你知道几个?
- 弱电工程施工组织设计
- ubuntu下安装teamview
- Java 读取Excel ( xls 和 xlsx 格式 )
- 【Java基础】ArraylistLinkedList机制,failfastfailsafe
- Javascript 格式化json字符串
- java如何实现发布微博的功能_使用java调用新浪微博开发api进行通信
- MATLAB符号数学解非线性方程组 -- 眼球反射模型
- Java集合源码解析
- linux 文本行倒叙,Linux文本行倒序排列6种方法
- Swift--在 30 天内,从零开始学习 Swift
- 无屏电视:智能电视的终极形态?
热门文章
- HDOJ 1875 畅通工程再续
- LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”
- phpstudy使用(80端口被system占用,无法关闭和删除)
- linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数
- Linux高频命令汇总,Linux高频命令
- Android 同步锁死锁,Android多线程研究(3)——线程同步和互斥及死锁
- access vba代码大全_VBA 实践指南 -- VBA连接各种数据库
- efcore 实体配置_创建并配置模型
- 下列python语言、返回结果不是uc_MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c++程序语言作业代做...
- linux中将hdfs数据导入hbase,将数据文件导入到HBase中