LeetCode First Missing Positive
来源:互联网 发布:西南交通大学网络缴费 编辑:程序博客网 时间:2024/06/09 13:45
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.
思路一:首先将符合条件的正数和其他数分开,然后在正数中进行判断。假设符合条件的数的个数为N,假设nums[i]为temp,将nums[temp]的值设为对应的负数,说明temp这个数存在,最后再进行遍历判断丢失了那个正数。
代码如下:
class Solution {public: void swap(vector<int>& nums,int i,int j) { if(i!=j) { nums[i] ^= nums[j]; nums[j] ^= nums[i]; nums[i] ^= nums[j]; } } int partition(vector<int>& nums) { int i,q=-1; i=0; for(i=0;i<nums.size();i++) { if(nums[i]>0) { q++; swap(nums,q,i); } } return q; } int firstMissingPositive(vector<int>& nums) { if(nums.empty()) return 1; int k = partition(nums)+1; for(int i=0;i<k;i++) { int temp = abs(nums[i]); if(temp<=k) nums[temp-1] = nums[temp-1]>0?-nums[temp-1]:nums[temp-1]; } for(int i=0;i<k;i++) { if(nums[i] > 0) return i+1; } return k+1; }};
思路二:将数值放到其对的下标处,然后判断哪个下标的对应的数值不是下标值加1,那么该下标值加1就是所求答案
代码如下:
class Solution {public: void swap(vector<int>& nums,int i,int j) { if(i!=j) { nums[i] ^= nums[j]; nums[j] ^= nums[i]; nums[i] ^= nums[j]; } } int firstMissingPositive(vector<int>& nums) { for(int i=0;i<nums.size();i++) { if(nums[i] == i+1) continue; int x = nums[i]; while(x >= 1 && x <= nums.size() && nums[x-1] != x) { swap(nums,i,x-1); x=nums[i]; } } for(int i=0;i<nums.size();i++) { if(nums[i] != i+1) return i+1; } return nums.size()+1; }};
效率依然不理想 - -
0 0
- LeetCode: First Missing Positive
- LeetCode First Missing Positive
- LeetCode: First Missing Positive
- [Leetcode] First Missing Positive
- [LeetCode] First Missing Positive
- [Leetcode] First Missing Positive
- leetcode First Missing Positive
- LeetCode First Missing Positive
- [leetcode] first missing positive
- LeetCode: First Missing Positive
- [LeetCode]First Missing Positive
- LeetCode-First Missing Positive
- [leetcode] First Missing Positive
- [LeetCode] First Missing Positive
- LeetCode - First Missing Positive
- LeetCode | First Missing Positive
- Leetcode: First Missing Positive
- Leetcode:First Missing Positive
- win7设置密码次数超限技巧
- Diablo(暗黑破坏神)的特效实现
- zookeeper集群与kafka集群搭建
- Linux 下的图形库介绍
- 【php】empty和isset的区别 总结
- LeetCode First Missing Positive
- MYSQL存储过程出现Result consisted of more than one row 错误的解决方法
- jQuery-自学笔记(1)——基础入门
- 单例设计模式(Singleton)
- 在 maven 中使用本地 jar 包
- spring部署junit 模块化测试
- 通过微信网页授权获取用户OpenId(redirect_uri 参数错误)
- Hello CSDN!
- 微信小程序搞起来!!!