LeetCode() First Missing Positive
2015-11-19 19:27
316 查看
非常内疚,没想到这样的思路。
思路:把数组上某一个位置的值放到正确的地方上去(nums[i-1] == i),nums[i] >0 && <n && nums[i] != nums[nums[i]-1]
题目中一旦要求 O(1) ,不要求开辟多余的空间,那么直觉上应该就是直接操作数组本身,如果这个数还有一个特点,就是应该在 1~n 内,应该要想到 swap().
思路:把数组上某一个位置的值放到正确的地方上去(nums[i-1] == i),nums[i] >0 && <n && nums[i] != nums[nums[i]-1]
class Solution { public: int firstMissingPositive(vector<int>& A) { int i = 0; int n=A.size(); for (; i < n; ){ if (A[i] <= 0 || A[i] == i+1 || A[i] > n || A[i] == A[A[i]-1]) i++; // 无效交换或位置正确 else swap(A[i], A[A[i]-1]); // 交换到正确的位置上 } for (i = 0; i < n; i++) if (A[i] != i+1) break; // 寻找第一个丢失的正数 return i+1; } };
题目中一旦要求 O(1) ,不要求开辟多余的空间,那么直觉上应该就是直接操作数组本身,如果这个数还有一个特点,就是应该在 1~n 内,应该要想到 swap().
相关文章推荐
- 人工鱼群算法java版
- Houdini otl bake fracture animation Python程序
- MATLAB单双精度的转换
- APP的安装卸载测试
- python的常见错误和异常
- 响应者链和 UILabel的userInteractionEnabled属性
- jsoup入门
- 各协议(TCP/IP、UDP、HTTP、socket)内与外简述
- ios编程之蓝牙交互
- FPGA开发基本流程及注意事项
- HTML与CSS入门——第十三章 使用框架
- SELINUX zabbix 设置
- 《iOS Human Interface Guidelines》——Design Principles
- Java中CountDownLatch、CyclicBarrier、Thread.join方法基本应用
- POJ 2533 O(nlogn)解最长递增子序列(构造法)
- 优先队列基本用法
- uva12118
- AsyncTask源码浅析
- 利用 UIAppearance 协议自定义控件外观
- Http协议网络请求java方式