[leetcode]41. First Missing Positive,C++/python实现,hard难度
来源:互联网 发布:精通qt4编程 源码 编辑:程序博客网 时间:2024/06/08 16:35
题目
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.
Subscribe to see which companies asked this question
刚开始觉得挺简单的,一看好多限制条件,要O(n)的时间复杂度,而且还要常数空间。
分析一下:因为是最小的整数,
反正是从1,2,3。。。。开始的。
那就把每一个数,给到他们自己的位置,比如说【3,4,-1,1】
把所有的数都放到位置:变成【1,-1,3,4】 那就能找到 那个-1的位置了。
因为要常数空间,那估计的言外之意就是,交换swap。
1.不过这里面有坑,首先【2,3】这样的,3就不能换,也就是说大过数组长度的不要动。
3.而且小于0的也不能换,
3.还有这个【3,4,-1,1】如果只换一次。。
先换3,变成【-1,4,3,1】
然后4 变成【-1,1,3,4】
哎到头了。。。这个1怎么办。。。
所以要不停的换,换到不能换了为止:
改成:
先换3,变成【-1,4,3,1】,第一个位置是-1,不能换了
再还4,变成【-1,1,3,4】,第二个位置是1,继续换【1,-1,3,4】
后面就不换了。。。
4.还有一个坑:【1,2,3】。。。换到头了,怎么办,返回4。
下面上代码:
class Solution(object): def firstMissingPositive(self, nums): """ :type nums: List[int] :rtype: int """ L=len(nums) for m in range(L): if nums[m]>L: continue val = nums[m]-1 while nums[m]>0 and val<L and nums[val] != nums[m]: #小于等于0,大于等于长度的不换。 nums[m],nums[val]=nums[val],nums[m] val = nums[m]-1 for m in range(len(nums)): if nums[m] != m +1: return m +1 return L+1
class Solution {public: int firstMissingPositive(vector<int>& nums) { if(nums.size()==0)return 1; int t;int p=1; while(p){ p=0; for(auto i=nums.begin();i!=nums.end();i++){ if(*i>0){ t=*i; if(t>nums.size())continue; if(*i==*(nums.begin()+t-1))continue; *i=*(nums.begin()+t-1); *(nums.begin()+t-1)=t; p=1; } } } for(auto i=nums.begin();i!=nums.end();i++){ if(*i!=i-nums.begin()+1)return i-nums.begin()+1; }return nums.size()+1; }};
- [leetcode]41. First Missing Positive,C++/python实现,hard难度
- 【leetcode】41. First Missing Positive 【hard】
- [hard]41. First Missing Positive
- 41. First Missing Positive[hard]
- 41. First Missing Positive Hard
- 41. First Missing Positive Leetcode Python
- 【LeetCode】41. First Missing Positive(Hard)解题报告
- [LeetCode] [C] 41. First Missing Positive
- 【Leetcode】【python】First Missing Positive
- Hard-题目29:41. First Missing Positive
- [LeetCode]41.First Missing Positive
- LeetCode --- 41. First Missing Positive
- LeetCode 41.First Missing Positive
- [Leetcode] 41. First Missing Positive
- [leetcode] 41.First Missing Positive
- leetCode 41. First Missing Positive
- LeetCode 41. First Missing Positive
- leetcode 41. First Missing Positive
- 自定义控件之水波纹的实现
- CouchDB介绍
- The project was not built since its build path is incomplete
- 调用Android的相机与图库并进行剪切
- 杭电OJ 1016 Prime Ring Problem
- [leetcode]41. First Missing Positive,C++/python实现,hard难度
- Hbase介绍
- c primer plus第8章总结:字符输入输出
- n个元素的全排列(非递归+去重)
- SystemClock 中方法的意义
- 初始化TableViewCell时获取到的宽度错误
- Centos下Yum安装PHP5.5,5.6,7.0
- RecyclerView中item无法充满的问题
- O2O(Online To Offline)