新博文地址:[leetcode]First Missing Positive
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.
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.
这是一道好题哇,我实在没想到用O(1)的空间做解,用的O(n),后来看了网上的解答,思路的确很相似,只是人家在原数组上直接走出了修改,我则另开了空间,但是最后呈现出来的形式是一样的。
先看下我的算法:
先遍历一遍数组A,找到在[1,a.length]范围内最大的数,比如说该数字是x,则开辟x + 1个空间copy
然后第二遍扫描数组A,将[1~x]的数字都丢到新数组的下标为其本身的槽内。例如1,就丢在copy[1]中,x就丢在copy[x]中。
扫描copy数组,遇到第一个空槽,则返回槽的索引,如果没有遇到空槽,则返回x + 1。
使用空间均值在n / 2,最坏达到O(n)。
代码如下:
public int firstMissingPositive(int[] a) { if(a == null || a.length == 0){ return 1; } int max = 0; for(int i = 0 ; i < a.length; i++){ if(a[i] <= a.length && a[i] > 0 && a[i] > max){ max = a[i]; } } int[] copy = new int[max + 1]; for(int i = 0; i < a.length; i++){ if(a[i] <= a.length && a[i] > 0){ copy[a[i]] = a[i]; } } for(int i = 1; i < copy.length; i++){ if(copy[i] == 0){ return i; } } return copy.length; }
如上所说,空间复杂度不满足题中要求,因此上网找了更好的算法,这是一个非常具有借鉴意义的题目:
具体的算法思想可以看这里。
道理是一样的,但是略微复杂,其将每个合法数字(1 ~ a.length)都放在属于自己的槽,但是对于非法数字则不作交换处理。
具体代码如下
public int firstMissingPositive(int[] a) { if(a == null || a.length == 0){ return 1; } for(int i = 0; i < a.length;){ if(a[i] <= a.length && a[i] > 0 && a[i] != i + 1 && a[i] != a[a[i] - 1]){ int tem = a[a[i] - 1]; a[a[i] - 1] = a[i]; a[i] = tem; }else{ i++; } } for(int i = 0 ; i < a.length; i++){ if(a[i] != i + 1){ return i + 1; } } return a.length + 1; }
是厉害
相关推荐
java java_leetcode题解之First Missing Positive.java
c语言入门 C语言_leetcode题解之41-first-missing-positive.c
js js_leetcode题解之41-first-missing-positive.js
leetcode 71 Python用 ...Missing Positive (HARD) leetcode 42. 收集雨水 (HARD) leetcode 44. 通配符匹配 (HARD) leetcode 45. Jump Game II (HARD) Leetcode 51. N-Queens (HARD) Leetcode 52. N-
268| [Missing Number](https://leetcode.com/problems/missing-number/) | [C++](./C++/missing-number.cpp) [Python](./Python/missing-number.py) | _O(n)_ | _O(1)_ | Medium | LintCode || 318| [Maximum ...
First Missing Positive 广度优先搜索 773. Sliding Puzzle 864. Shortest Path to Get All Keys 深度优先搜索 996. Number of Squareful Arrays 拓扑排序 269. Alien Dictionary 单调栈 42. Trapping Rain Water 85...
leetcode打不开Leetcode Note Tips Tip1: Two pointer for sorted array (#Array 1. Two Sum) Tip2: Sum[i:j] = Sum[0:j] - Sum[0:i] for continuous array (# Array 560. Subarray Sum Equals K) Tip3: Knapsack ...
├── First Missing Positive │ ├── Readme.md │ └── solution.js ├── Trapping Rain Water │ ├── Readme.md │ └── solution.js ├── Wildcard Matching │ ├── Readme.md │ └── ...
2. **First Missing Positive**:这是一个关于数组处理的问题,要求找到数组中第一个缺失的正整数。它需要理解数组的特性并进行有效的遍历,可能使用到排序或哈希表等数据结构。 3. **Best Time to Buy and Sell ...
- First Missing Positive: 找出数组中缺失的最小正数。 - Trapping Rain Water: 给定一个数组,其中每个元素代表一个宽度为1的柱子高度,计算能接多少雨水。 - Multiply Strings: 给定两个非负整数字符串形式的数,...
- First Missing Positive(缺失的第一个正数) - 2 Sum(两数之和) - 3 Sum(三数之和) - 3 Sum Closest(三数之和最接近) - Remove Duplicates from Sorted Array(删除有序数组中的重复项) - Remove ...
- **数组中的第一个不重复的数字(First Missing Positive)**: 找出数组中缺失的第一个正数。 #### 排序算法 - **合并排序数组(Merge Sorted Array)**: 将两个排序数组合并成一个新的排序数组。 - **寻找数组中的中...
41_First_Missing_Positive 299_Bulls_and_Cows 134_Gas_Station 118_Pascal's_Triangle_I 119_Pascal's_Triangle_II 169_Majority_Element 229_Majority_Element_II 274_H_索引 275_H_Index_II 217_Contain_...
题:**First Missing Positive 给定一个未排序的整数数组,找到第一个缺失的正整数。 例如,给定 [1,2,0] 返回 3,而 [3,4,-1,1] 返回 2。 您的算法应该在 O(n) 时间内运行并使用恒定空间。 **第 0003 题:**String ...
本资源包聚焦于LeetCode的第41题——"缺失的第一个正数"(First Missing Positive)。这是一道中等难度的题目,旨在检验程序员对数组处理以及优化算法的能力。下面将详细探讨这个问题的解决方案、相关的C++编程技巧...
缺失的第一个整数](./Array/first-missing-positive.md) [0042 接雨水](./Array/trapping-rain-water.md) [0048 旋转图像](./Array/rotate-image.md) Heap 堆 [0023 合并K个排序链表](./Heap/merge-k-sorted-lists....
leetcode 2 code_interview leetcode和lintcode的一些题目的解法 是剑指offer 是面试中遇到的有意思的题目总结,比如说BAT,intel,NVIDIA等公司面试的题目记录 ...41-first-missing-positive 01-Two-Sum 求解第K
股票买卖最佳时机leetcode Java项目 这是 ...First_Missing_Positive Generate_All_Parenthesis_2 实现_StrStr Largest_Distance_Between_Nodes_Of_A_Tree Largest_Rectangle_In_Histogram Least_C
"First Missing Positive"是LeetCode中的一道经典问题,旨在考察我们对数组操作的理解以及对算法设计的能力。这个问题的标题是"第一个缺失的正数",其核心目标是从给定的未排序整数数组中找到最小的缺失正整数。 ...
收集面试中提出的一些重要问题。 数据结构算法面试问题面试中提出的一些重要问题的集合。 数组...missing-positive / https://leetcode.com/problems/container-with-most-water/ htt