【LeetCode】缺失的第一个正数【原地HashMap】
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3示例 2:
输入: [3,4,-1,1]
输出: 2示例 3:
输入: [7,8,9,11,12]
输出: 1说明:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
分析:
要求时间复杂度为O(N),并且只能使用常数级别的空间
根据抽屉原理:数组的长度n,则答案最大只能是n+1;
可以使用hash函数将答案空间映射到长度为n+1的数组上,再遍历数组找到最小的没出现的正整数。
为实现常数空间复杂度,可以使用原数组的空间:
如果 0<nums[i]<=nums.length;
则将nums[i] 跟 nums[nums[i]-1]交换;
最后再遍历数组,如果num[i] != i+1,则i+1就是缺失的最小正整数。
该方法可以叫做原地HashMap,利用原数组的空间,同时也只需要遍历两次数组
时间复杂度:O(N)
空间复杂度:O(1)
class Solution
{
public:
int firstMissingPositive(vector<int>& nums)
{
int n=nums.size();
for (int i = 0; i < n; i++)
{
while(nums[i] != i+1 && nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i]-1])
{
int j = nums[i];
nums[i] = nums[j-1];
nums[j-1] = j;
}
}
for (int i = 0; i < n; i++)
{
if(nums[i] != i+1)
{
return i+1;
}
} return n+1;
}
};
【LeetCode】缺失的第一个正数【原地HashMap】的更多相关文章
- LeetCode缺失的第一个正数
LeetCode 缺失的第一个正数 题目描述 给你一个未排序的整数数组 nums,请你找出其中没有出现的最小的正整数. 进阶:你可以实现时间复杂度为 O(n)并且只使用常数级别额外空间的解决方案吗? ...
- LeetCode:缺失的第一个正数【41】
LeetCode:缺失的第一个正数[41] 题目描述 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3示例 2: 输入: [3,4,-1,1] ...
- Leetcode 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(41):缺失的第一个正数
Hard! 题目描述: 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输 ...
- leetcode之缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0]输出: 3示例 2: 输入: [3,4,-1,1]输出: 2示例 3: 输入: [7,8,9,11,12] ...
- [Leetcode] first missing positve 缺失的第一个正数
Given an unsorted integer array, find the first missing positive integer. For example,Given[1,2,0]re ...
- LeetCode 41. 缺失的第一个正数(First Missing Positive)
题目描述 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8 ...
- leetcode 41缺失的第一个正数
time O(n) space O(1) class Solution { public: int firstMissingPositive(vector<int>& nums) ...
随机推荐
- 02、JDBC查询
① 向数据库发送SQL查询语句 首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()创建SQL语句对象. Statement sql ...
- English--比较结构
English|比较结构 接下来让我们一起来透析,英语中的比较结构.各位同学,带上小板凳,要认真哦~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感 ...
- 关于final
最近见的一道选择题 刚学习一直认为final修饰,为常量,必须声明时被初始化,现在又明白第二种情况可以通过创建对象之后由构造方法立即初始化. 1.final修饰类不能被继承 2.final修饰方法不能 ...
- android studio学习----创建模拟器
建议在创建模拟器前把 SDK Manager 中的 Tools.Extras 都更新到最新. 如何弹出下面的各个图,首先直接点击 运行 然后会选择 launcher ,点击那个 ...就出来了 ...
- UIPickerView基本使用
UIPickerView是很常用的一个UI控件,在各种购物平台选择地址时候都是必备的,下面我们来说一下具体的使用 首先UIPickerView的创建,与多数控件一样,分配内存并设置位置尺寸. 重要的的 ...
- JavaWeb 发送邮件
我们可以使用第三方的邮箱服务器来发送邮件. 常用的邮件传输协议有2种:POP3/SMTP.IMAP/SMTP. POP和IMAP的区别:在邮箱客户端的操作,比如移动邮件.标记已读,如果使用POP,是不 ...
- Redis 分布式锁的正确打开方式
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- MySQL数据库(一)-- 数据库介绍、MySQL安装、基础SQL语句
一.数据库介绍 1.什么是数据库 数据库即存储数据的仓库 2.为什么要用数据库 (1)用文件存储是和硬盘打交道,是IO操作,所以有效率问题 (2)管理不方便 (3)一个程序不太可能仅运行在同一台电脑上 ...
- JS里==和===区别
面试常问的一个基础问题 == 和 ===区别是什么? 这里简单描述下 "==="叫做严格运算符,"=="叫做相等运算符 而且 == 会对数据做隐式转换,而=== ...
- RHCE试题解析
环境准备 yum-config-manager --add-repo=ADDREPO vim /etc/yum.conf gpgcheck=0(1=on,0=off) 增加指定repo源,关闭签名 ...