java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
法一:桶排序思想
解题思路 |
---|
- 题目说,每个集合的值都是1 ~ n,一般我们会想到将数组中元素,挨个作为key放入map中,然后遍历1~n从map中获取value,看看谁是0,谁是2.
- 但是我们可以直接再创建一个数组,长度为n+1,用下标来代表数字,将1~n的个数,放入桶中。比如遍历nums数组是,当前元素是1,就放入下标为1的桶中,此时这个桶有1个元素,当我们有遍历到1时,再次放入下标为1的桶,此时这个桶有2个元素。
代码:时间复杂度O(n) 空间复杂度O(n) |
---|
class Solution {
public int[] findErrorNums(int[] nums) {
int[] ans = new int[2];//答案要求返回形式
int[] bucket = new int[nums.length + 1];//桶排序的思想,因为nums中的值固定为1~n
for (int num : nums) bucket[num]++;//将数组中的值,放入对应的桶
for (int i = 1; i <= nums.length; i++) {
//依次遍历1~n
if (bucket