原地哈希
41. 缺失的第一个正数
Difficulty: 困难
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例 1:
12输入:nums = [1,2,0]输出:3
示例 2:
12输入:nums = [3,4,-1,1]输出:2
示例 3:
12输入:nums = [7,8,9,11,12]输出:1
提示:
1 <= nums.length <= 5 * 10<sup>5</sup>
-2<sup>31</sup> <= nums[i] <= 2<sup>31</sup> - 1
Solution
前言
如果本题没有额外的时空复杂度要求,那么就很容易实现:
我们可以将数组所有的数放入哈希表,随后从 1 开始依次枚举正整数,并判断其是否在哈希表中;
我们可以从 1 开始依次枚举正整数,并遍历数组,判断其是否在数组中。
如果数组的长度为 NNN, 那么第一种做法的时间复杂度为 O( ...
算法代码笔记
算法基础
快速排序
12345678910111213141516171819202122232425void quick_sort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1; //注意i,j起始位置是在l,r的越界位置 int x = q[l + r >> 1]; while (i < j) { do ++i; while (q[i] < x); do --j; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j); quick_sort(q, j + 1, r);}void quickSort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1; int x = q[l + r & ...