leecode刷题 之 41 FirstMissingPositive
2018-03-21 14:21
260 查看
参考链接 https://www.cnblogs.com/zhuifengjingling/p/5296805.html
题意:给出一个乱序(未排序)集合,找到这个集合中第一个不存在的正整数。(时间复杂度为O(n),空间负责度为长度)
例如: 输入集合 {1,2,0} 返回0;
输入集合 {3,4,-1,1} 返回2;
分析:对给出的集合中元素,依次判断正数x(从小到大),是否在集合中存在,只要有一个不满足,则返回这个不满足的数。
具体实现代码如下:
运行结果如下:
题意:给出一个乱序(未排序)集合,找到这个集合中第一个不存在的正整数。(时间复杂度为O(n),空间负责度为长度)
例如: 输入集合 {1,2,0} 返回0;
输入集合 {3,4,-1,1} 返回2;
分析:对给出的集合中元素,依次判断正数x(从小到大),是否在集合中存在,只要有一个不满足,则返回这个不满足的数。
具体实现代码如下:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class HelloWorld { //用于测试的主方法 public static void main(String[] args) { int[] arrays = {3,4,-1,1}; System.out.println(getFirstMissingPositive(arrays)); } public static List<List<Integer>> combinationSum1 = new ArrayList<>(); /** * 获取集合中第一个缺失正数的方法 * @param array * @return */ public static int getFirstMissingPositive(int[] array) { //先对数据组进行排序,这个排序的规则不是升序也不是降序,而是根据数组元素 // 的值去定位起在数组中的位置,比如1,肯定要排在数组的第一个位置 // 那么,理想状态下 //排序过后,对于长度为n的数组array,存在 array[i] = i+1,其中i>=1 && i<n //如果数组中有重复元素获取元素的值超过了array.length了,那么意味着必然有缺失的元素 int n = array.length; for (int i = 0; i < n; i++) { //如果array[i] == i+1,则array[i]的值可以不改变 //如果array[i] == array[array[i] - 1](array[i]的位置上有了一个相同值的元素,则就不交换位置) //如果array[i] 的值不在0-n之间,则无话定为到其的预期位置,所以不交换 //只有不在以上三种情况下,才数组元素位置的调整 if (array[i] != (i + 1) && array[i] > 0 && array[i] <= n && array[i] != array[array[i] - 1]) { // int tmp = array[i]; //array[i] = array[array[i] - 1]; //array[array[i] - 1] = tmp; //注意上面的交换是有问题,因为array[i]先发生了变化 int tmp = array[array[i] - 1]; array[array[i] - 1] = array[i]; array[i] = tmp; //TODO 注意事项,因为值进行了交换需要重新对当前tmp的进行定位 i--; } } //在进行一次遍历找到不合法数据的位置,进行返回 for (int i=0;i<n;i++) { if (array[i] != i + 1) { return i + 1; //返回缺少的值 } } return -1; } }
运行结果如下:
相关文章推荐
- 41. First Missing Positive
- LeetCode(41)First Missing Positive
- LeetCode 41:First Missing Positive
- 41. First Missing Positive
- 41. First Missing Positive
- Leetcode (41) First Missing Positive
- 41. First Missing Positive
- 41. First Missing Positive
- [LeetCode 41] First Missing Positive
- 41. First Missing Positive
- LeetCode(41)First Missing Positive
- 【leetcode】Array——First Missing Positive(41)
- 41. First Missing Positive
- [leetcode 41] First Missing Positive
- leetcode hard模式专杀之41 First Missing Positive
- [Leetcode 41] First Missing Positive
- 41. First Missing Positive
- 41. First Missing Positive
- 41. First Missing Positive
- 41. First Missing Positive