栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

278、找到所有数组中消失的数字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

278、找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

  

示例 1:

输入:nums = [4,3,2,7,8,2,3,1]

输出:[5,6]

示例 2:

输入:nums = [1,1]

输出:[2]

  

提示:

n == nums.length

1 <= n <= 105

1 <= nums[i] <= n

进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.number;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class FindAllNumbersDisappearedInAnArray {

    

    

    public List findDisappearedNumberSet(int[] nums) {

        //List existList = new ArrayList<>(nums.length);

        //用Set,16ms;用ArrayList和linkedList超时了

        Set existList = new HashSet<>();

        for (int index = 0; index < nums.length; index++) {

             existList.add(nums[index]);

        }

        // 0表示有值,0不会和nums中的数字冲突

        for (int num : existList) {

            nums[num - 1] = 0;

        }

        List notExistList = new ArrayList<>();

        // 非0,表示没有值

        for (int index = 0; index < nums.length; index++) {

            if (nums[index] != 0) {

                notExistList.add(index + 1);

            }

        }

        return notExistList;

    }

    

    public List findDisappearedNumbers(int[] nums) {

        int[] numsExist = new int[nums.length];

        for (int index = 0; index < nums.length; index++) {

            final int num = nums[index];

            numsExist[num - 1] = 1;

        }

        List notExistList = new ArrayList<>();

        for (int index = 0; index < numsExist.length; index++) {

            if (numsExist[index] == 0) {

                notExistList.add(index + 1);

            }

        }

        return notExistList;

    }

}

package test.leecode.isNumber;

import java.util.List;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.number.FindAllNumbersDisappearedInAnArray;

public class FindAllNumbersDisappearedInAnArrayTest {

     

    @Test

    public void test() {

        FindAllNumbersDisappearedInAnArray mn = new FindAllNumbersDisappearedInAnArray();

        int[] nums2=new int[] {1,1};

        int[] nums5=new int[] {1,3,4,2,2};

        int[] nums11=new int[] {10,9,8,2,5,6,4,3,3,7,9};

        Assert.assertEquals((Object)2,mn.findDisappearedNumbers(nums2).get(0));

        Assert.assertEquals((Object)5,mn.findDisappearedNumbers(nums5).get(0));

        final List numList = mn.findDisappearedNumbers(nums11);

        final Object actual1 = numList.get(0);

        final Object actual11 = numList.get(1);

        Assert.assertEquals(1,actual1);

        Assert.assertEquals(11,actual11);

    }

     

    @Test

    public void testSet() {

        FindAllNumbersDisappearedInAnArray mn = new FindAllNumbersDisappearedInAnArray();

        int[] nums2=new int[] {1,1};

        int[] nums5=new int[] {1,3,4,2,2};

        int[] nums11=new int[] {10,9,8,2,5,6,4,3,3,7,9};

        Assert.assertEquals((Object)2,mn.findDisappearedNumberSet(nums2).get(0));

        Assert.assertEquals((Object)5,mn.findDisappearedNumberSet(nums5).get(0));

        final List numList = mn.findDisappearedNumberSet(nums11);

        final Object actual1 = numList.get(0);

        final Object actual11 = numList.get(1);

        Assert.assertEquals(1,actual1);

        Assert.assertEquals(11,actual11);

    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号