力扣448:
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
package com.lz.forth;
import java.util.ArrayList;
import java.util.List;
public class NumbersDisappeared {
public static void main(String[] args) {
int[] temp={4,3,2,7,8,2,3,1};
System.out.println(findDisappearedNumbers(temp));
int[] temp1={4,3,2,7,8,2,3,1};
System.out.println(findDisappearedNumbers1(temp1));
}
/*利用数组nums来记录数字是否出现过,把数字变为负数*/
public static List findDisappearedNumbers1(int[] nums) {
int n=nums.length;
for(int num:nums) {
int index=Math.abs(num)-1;
if(nums[index]>0)
nums[index]=-nums[index];
}
Listret=new ArrayList();
for(int i=0;i0) {
ret.add(i+1);
}
}
return ret;
}
/*利用数组nums来记录数字是否出现过,对数字+n*/
public static List findDisappearedNumbers(int[] nums) {
int n=nums.length;
for(int num:nums) {
int x=(num-1)%n ;/*对n取模来还原出它本来的值*/
nums[x]+=n;
}
List result=new ArrayList();
for(int i=0;i