leetcode-645-错误的集合
[博客链接]
[题目描述
1 | java复制代码集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有 |
[题目链接]
[github地址]
[思路介绍]
**思路一:hash存储+两次遍历
1 | java复制代码public int[] findErrorNums(int[] nums) { |
时间复杂度O(n)时间复杂度O(n)时间复杂度O(n)
思路二:思路一的优化
- 通过数组记录重复元素,减少set存储
1 | java复制代码public int[] findErrorNums(int[] nums) { |
时间复杂度O(n)时间复杂度O(n)时间复杂度O(n)
思路三:数学
- 正常没有重复元素总和为等差数列求和total
- 通过数组记录重复元素
- 所有总和-非重复元素和为重复元素
- 目标和-非重复元素和为丢失元素
1 | java复制代码public int[] findErrorNums(int[] nums) { |
时间复杂度O(n)时间复杂度O(n)时间复杂度O(n)
思路四:桶排序
- 将对应元素i放入nums[i-1]
- 然后遍历一次,找到非对应元素
- 可以节省存储空间
1 | java复制代码public int[] findErrorNums(int[] nums) { |
时间复杂度O(n),空间复杂度O(1)
本文转载自: 掘金