Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

思路:该题求得是从1开始的正整数,第一个没有在所给数组中出现的正整数。

因为是从1开始的,我们可以将数组中所有的正整数都移动到它的正确位置,当所有数字都移动完毕后,从头检查第一个没有出现在该出现位置上的正整数就是所求的数字。若所有的数都出现了,则所求的数字就是n + 1,所有数字后面的那个数字。

该算法因为所有数字都是移动到自己的正确位置,因此每个数字都只会被移动一次。复杂度因此是O(n)。

所给数组中如果出现了重复的数字也不要紧,因为随着交换,所有正整数都回到了自己的正确位置后,重复数字会被交换到剩余的位置中去。而这些位置并不是他们的正确位置,因此也能指示出他们所处位置的正数缺失了。

 class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
for (int i = ; i < n; i++)
while (nums[i] > && nums[i] <= n && nums[nums[i] - ] != nums[i])
swap(nums[i], nums[nums[i] - ]);
for (int i = ; i < n; i++)
if (nums[i] != i + )
return i + ;
return n + ;
}
};

最新文章

  1. yii2搭建完美后台并实现rbac权限控制案例教程
  2. Python强化训练笔记(三)——词频的统计
  3. 【转】Linux下打包压缩war和解压war包
  4. iOS开发常用的宏
  5. jquery层居中,点击小图查看大图,弹出层居中代码
  6. Yaroslav and Divisors
  7. 使用Promise规定来处理ajax请求的结果
  8. 联想企业网盘:SaaS服务集群化持续交付实践
  9. JAVAC 命令使用方法
  10. Windows 8 应用开发 - 本地数据存储
  11. web实现QQ第三方登录
  12. Android自定义组合控件内子控件无法显示问题
  13. Q_DISABLE_COPY
  14. git 工作流介绍
  15. 想做iPhoneX抢购活动?压测大师先教你优化网站后台
  16. BZOJ_1208_[HNOI2004]宠物收养所_SPLAY
  17. 做了面向互联网部署的Dynamics 365 CE更改AD FS的登录页面
  18. 课程9:《hibernate框架开发2016版视频》视频目录
  19. win10:在关闭防火墙下如何屏蔽特定端口
  20. IIS发布的网站常见的问题汇总

热门文章

  1. CSS简易学习笔记
  2. 深copy和浅copy
  3. mac虚拟机上(centos系统)怎样实现共享本机文件
  4. Python网络编程(epoll内核监听,多任务多进程)
  5. Oz 创建CentOS6镜像
  6. PAT——甲级1042:Shuffling Mashine
  7. Python-有名匿名函数、列表推导式
  8. altium designer同一工程多个原理图如何快速查找同一网络标号
  9. [bzoj1033] [ZJOI2008]杀蚂蚁antbuster
  10. [CF522D]Closest Equals