leetcode:找到所有数组中消失的数字

力扣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

你可能感兴趣的:(力扣,算法,java)