解题思路:
- 使用堆排序,构造小顶堆。时间复杂度O(nlogn),空间复杂度O(1)
- 使用HashMap,时间复杂度O(n),空间复杂度O(n)
- 原地哈希,时间复杂度O(n), 空间复杂度O(1)
具体实现:
/**
* 原地哈希算法 (哈希算法的改良版)
* 给定一个数组arr,数组长度为len,未出现的最小正整数一定不会超过len + 1,
* 即 [1, len] 这个区间的数都出现了,那么未出现的最小正整数就是len + 1,
* 否则未出现的最小正整数一定是[1, len]之间的某个数
*
* 我们应该使得arr[i] = i + 1,即i + 1这个数hash到i这个位置
* 如果arr[i] != i + 1,则i + 1这个数就没有出现
* return the min number
* @param arr int整型一维数组 the array
* @return int整型
*/
public int minNumberdisappered (int[] arr) {
// write code here
int len = arr.length