写点什么

【LeetCode】找到所有数组中消失的数字 Java 题解

用户头像
HQ数字卡
关注
发布于: 2021 年 02 月 13 日

题目

给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。


找到所有在 [1, n] 范围之间没有出现在数组中的数字。


代码

public class DayCode {    public static void main(String[] args) {        int[] nums = new int[]{4,3,2,7,8,2,3,1};        List<Integer> ans = new DayCode().findDisappearedNumbers(nums);        System.out.println("ans is " + ans);    }
/** * https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/ * @param nums * @return */ public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> ans = new ArrayList<>(); int[] arr = new int[nums.length + 1]; for (int num : nums) { arr[num] = 1; } for (int i = 1; i < arr.length; i++) { if (arr[i] == 0) { ans.add(i); } } return ans; }
/** * * @param nums * @return */ public List<Integer> findDisappearedNumbers2(int[] nums) { List<Integer> ans = new ArrayList<>(); int n = nums.length; for (int num : nums) { int x = (num - 1) % n; nums[x] += n; } for (int i = 0; i < n; i++) { if (nums[i] <= n) { ans.add(i + 1); } }
return ans; }}
复制代码

总结

  • 这个题目可以采用新建外部数组的方式来解决,空间复杂度是 O(n)

  • 方法 2 采用原地数组修改的方式解决,空间复杂度是 O(1)

  • 坚持每日一题,加油!

发布于: 2021 年 02 月 13 日阅读数: 10
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】找到所有数组中消失的数字Java题解