博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode41】First Missing Positive
阅读量:4100 次
发布时间:2019-05-25

本文共 804 字,大约阅读时间需要 2 分钟。

Given an unsorted integer array, find the smallest missing positive integer.Your algorithm should run in O(n) time and uses constant extra space.题意:求一个数组中最小的缺失正数。要求O(n)的时间复杂度和O(1)的空间复杂度。Example 1:Input: [1,2,0]Output: 3Example 2:Input: [3,4,-1,1]Output: 2Example 3:Input: [7,8,9,11,12]Output: 1Note:

思路:难点是O(n)的时间复杂度和O(1)的空间复杂度。因为是仅寻找第一个缺失的正数,所以若所有正数都在,则他们的值应该是1~nums.size()连续存在的。把每个值换到下标所在位置(使nums[i]==i+1),第一个不在对应位置的正数即为缺失值。替换过程如下:

需要注意,若当前元素的值在范围(1~nums.size())之外,则不需要交换,肯定是无效值;此外若要交换的两个值相同,则也不能交换,一是没必要,因为该值已经在正确位置,二是不能换,因为会造成死循环。

int firstMissingPositive(vector
& nums) { int len = nums.size(); for (int i = 0; i
= 1 && nums[i] <= nums.size() && nums[i] != i + 1 && nums[i] != nums[nums[i] - 1]) swap(nums[i], nums[nums[i] - 1]); else i++; } //输出第一个不在位置上的正数 for (int i = 0; i

 

 

转载地址:http://mhwsi.baihongyu.com/

你可能感兴趣的文章
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>
(python版)《剑指Offer》JZ30:连续子数组的最大和
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>