【LeetCode】448. Find All Numbers Disappeared in an Array
来源:互联网 发布:人工智能现状和趋势 编辑:程序博客网 时间:2024/06/06 20:45
问题描述
问题链接:https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/#/description
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
Example:
Input:[4,3,2,7,8,2,3,1]Output:[5,6]
我的代码
我没有想到不用额外的空间就解决的办法,所以我的答案很简单,就直接上代码了。
public class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { /* 不使用额外的内存我还是不会做,等着学习讨论区的大神们吧 */ int len = nums.length; boolean[] flags = new boolean[len + 1]; for(int i = 0; i < len; i++){ flags[nums[i]] = true; } List<Integer> numList = new ArrayList<Integer>(); for(int i = 1; i <= len; i++){ if(!flags[i]){ numList.add(i); } } return numList; }}
打败了41.4%的Java代码。来看一下讨论区。
讨论区
Java accepted simple solution
链接地址:https://discuss.leetcode.com/topic/65738/java-accepted-simple-solution
巧妙地在原数组里面蕴含了1bit的信息,不错。
The basic idea is that we iterate through the input array and mark elements as negative using nums[nums[i] -1] = -nums[nums[i]-1]. In this way all the numbers that we have seen will be marked as negative. In the second iteration, if a value is not marked as negative, it implies we have never seen that index before, so just add it to the return list.
public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> ret = new ArrayList<Integer>(); for(int i = 0; i < nums.length; i++) { int val = Math.abs(nums[i]) - 1; if(nums[val] > 0) { nums[val] = -nums[val]; } } for(int i = 0; i < nums.length; i++) { if(nums[i] > 0) { ret.add(i+1); } } return ret;}
5-line Java Easy-understanding
链接地址:https://discuss.leetcode.com/topic/66063/5-line-java-easy-understanding
这个也是类似的思想
public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> res = new ArrayList<>(); int n = nums.length; for (int i = 0; i < nums.length; i ++) nums[(nums[i]-1) % n] += n; for (int i = 0; i < nums.length; i ++) if (nums[i] <= n) res.add(i+1); return res;}
- LeetCode-Array-448. Find All Numbers Disappeared in an Array
- leetcode:448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array
- <leetcode>448.Find All Numbers Disappeared in an Array
- [LeetCode] 448. Find All Numbers Disappeared in an Array
- [LeetCode]448. Find All Numbers Disappeared in an Array
- leetcode 448. Find All Numbers Disappeared in an Array
- Leetcode 448. Find All Numbers Disappeared in an Array
- 【LeetCode】 448. Find All Numbers Disappeared in an Array
- 448. [LeetCode]Find All Numbers Disappeared in an Array
- [leetcode] 448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array
- Leetcode-448. Find All Numbers Disappeared in an Array
- 【Leetcode】448. Find All Numbers Disappeared in an Array
- LeetCode - 448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array
- LeetCode--448. Find All Numbers Disappeared in an Array
- LeetCode 448. Find All Numbers Disappeared in an Array(Java)
- 转接IC GM8284DD:LVDS转TTL芯片 28位LVDS图像接收器
- GYM 101149 G.Of Zorcs and Axes(set)
- pycharm 查询方法
- 误将/root剪切复制到其他目录下出现bash-4.1# 如何修改
- 数组中的一些常用方法总结
- 【LeetCode】448. Find All Numbers Disappeared in an Array
- Java 通过魔数判断上传文件的类型
- 蓝桥杯 算法提高 我们的征途是星辰大海
- -PHP面向对象(OOP)编程入门-6.如何去使用对象中的成员
- Dell H310 Mini Raid卡,新加入热备盘显示Foreign的解决方法
- HDU 2553 (DFS) N皇后问题
- Bear and Friendship Condition
- window.location.hash属性介绍
- 【机房重构】——减少代码冗余