leetcode解题之448. Find All Numbers Disappeared in an Array Java版 (找出缺少的数字)
2017-03-24 19:03
447 查看
448. Find All Numbers Disappeared in an Array
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]
不使用额外的空间找出数组中缺少的数字,有几个缺少的就有几个重复的
import java.util.*;
public class Solution {
// 注意有几个缺少的就有几个重复的。总数量不变,标志位解决
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> ret = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
// nums[i]从1到n而下标从0开始,要减去1
// temp是从[0,n-1]中少两个,但是有重复
int temp = Math.abs(nums[i]) - 1;
if (nums[temp] > 0)
nums[temp] = -nums[temp];
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] > 0)
ret.add(i + 1);
}
return ret;
}
}
import java.util.*; public class Solution { // 使用set存储出现的元素 public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> ret = new ArrayList<>(); // 不能使用list,有重复元素,容易超时 Set<Integer> temp = new HashSet<>(); for (int i : nums) { temp.add(i); } for (int i = 1; i <= nums.length; i++) { if (!temp.contains(i)) ret.add(i); } return ret; } }
相关文章推荐
- leetcode解题之268# Missing NumberJava版 (找出0~N中缺少的数字)
- leetcode解题之 12&13. Integer to Roman Java版(罗马数字和数字的转换)
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- leetcode解题之 15. 3Sum Java版(结果为目标值的三个数字)
- leetcode解题之 18. 4Sum Java版(结果是目标值的四个数字和)
- leetcode解题之215. Kth Largest Element in an Array java 版(第k大的数字)
- leetcode解题之 16. 3Sum Closest Java版(结果离目标值最近三个数字和)
- leetcode解题之136 #Single Number Java版(只出现一次的数字)
- leetcode解题之374. Guess Number Higher or Lower Java版 (猜数字大小二分查找)
- Java 找出四位数的所有吸血鬼数字 基础代码实例
- leetCode 9.Palindrome Number (回文数字) 解题思路和方法
- java读取只含字母和数字的文本文档并找出所有字母及各字母的个数
- leetCode 17.Letter Combinations of a Phone Number(电话数字对应的字母组合) 解题思路和方法
- leetCode 12.Integer to Roman (整数转罗马数字) 解题思路和方法
- Java 欧拉工程 第二十七篇【找出为连续数字产生最多质数的二次公式】
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- LeetCode Plus One Java版解题报告
- 景岁的Leetcode解题报告:147.Insertion Sort List (Java)
- 输入一串数字找出其中缺少的最小的两个数
- 去掉有序数组中重复数字 原地 leetcode java (最简单的方法)