leetcode -- First Missing Positive -- 简单trick题目
2015-12-22 20:01
537 查看
https://leetcode.com/problems/first-missing-positive/
http://chaoren.is-programmer.com/posts/42711.html
这里要对比missing Number题目,missing number是在0-n这n+1个数中选n个数,找那个miss掉了。用用idx于nums[idx]异或就可以了。这里不一样,是一个任意的unsorted array,找一个first missing positive.
通过swap, 把index = i上面放上元素 i + 1. 最后scan一遍,第一个A[i] != i + 1的 i + 1就是结果
这个程序在i = 0开始scan,碰到不满足A[i] != i + 1的条件时,那么就将这个A[i]换到满足条件的位置上,即A[A[i]-1]上,所以这里A[i]-1还不能越界,如果换来的A[A[i] - 1]依然不满足条件,那么就继续换一直换到满足条件。这里还要注意只有A[i] != A[A[i]-1]才交换。
思路1 swap
参考/article/6999390.htmlhttp://chaoren.is-programmer.com/posts/42711.html
这里要对比missing Number题目,missing number是在0-n这n+1个数中选n个数,找那个miss掉了。用用idx于nums[idx]异或就可以了。这里不一样,是一个任意的unsorted array,找一个first missing positive.
通过swap, 把index = i上面放上元素 i + 1. 最后scan一遍,第一个A[i] != i + 1的 i + 1就是结果
这个程序在i = 0开始scan,碰到不满足A[i] != i + 1的条件时,那么就将这个A[i]换到满足条件的位置上,即A[A[i]-1]上,所以这里A[i]-1还不能越界,如果换来的A[A[i] - 1]依然不满足条件,那么就继续换一直换到满足条件。这里还要注意只有A[i] != A[A[i]-1]才交换。
class Solution(object): def firstMissingPositive(self, A): length = len(A) i = 0 while i < length: if A[i] != i + 1 and A[i] >= 1 and A[i] <= length and A[i] != A[A[i]-1]: # swap A[i], A[A[i]-1] A[A[i]-1], A[i] = A[i], A[A[i]-1] else:#这里要注意一定要加这个else。意思就是说swap之后,A[i]被swap走了,换来了A[A[i]-1], 这个值也要考虑是否要将其swap走。 i += 1 for i in xrange(length): if A[i] != i + 1: return i + 1 return length + 1
思路2
/article/4981610.html相关文章推荐
- bzoj2152(树分治)
- poj2352树状数组
- SVN版本控制——基础篇
- Java中的线程池——ThreadPoolExecutor的原理
- 学习资源传送门
- Myeclipse下web项目改名,tomcat下不变的问题
- Java 笔记——序列化
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值(待更新)
- REMOTE_LOGIN_PASSWORDFILE(10.2)
- MySQL-5.7二进制包安装步骤
- 计步器的preference.xml和project properties学习
- VBS替换文本
- Tableau:数据可视化之急速BI
- Android获得屏幕宽高的方法
- 我的第一个Node.js项目
- Codeforces 609D 二分 or 三分
- QT学习之路(6)构建文件对话框
- Effective minidump
- hdu 1027 Ignatius and the Princess II【dfs 排列组合】
- Spring+Mybatis实现动态SQL查询