美文网首页
2021.2.13每日一题

2021.2.13每日一题

作者: Yaan9 | 来源:发表于2021-02-13 11:05 被阅读0次

448. 找到所有数组中消失的数字

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
实例:

输入:
[4,3,2,7,8,2,3,1]
输出:
[5,6]

题解

本题可以记录数组中每个数字出现的次数,保存在一个一维数组中。遍历这个一维数组,若某个下标的元素为0,即没有出现的数字,添加到最后的集合中。这种算法的空间复杂的为O(N)。

    public List<Integer> findDisappearedNumbers(int[] nums) {
        int[] count = new int[nums.length + 1];
        for (int num : nums) {
            count[num]++;
        }
        List<Integer> res = new ArrayList<>();
        for (int i = 1; i <= nums.length; i++) {
            if (count[i] == 0) {
                res.add(i);
            }
        }
        return res;
    }

题目要求我们使用O(1)的空间,即原地操作。遍历nums,每遇到一个数x,就让nums[x−1] 增加 n。由于nums中所有数均在 [1,n] 中,增加以后,这些数必然大于n。最后我们遍历nums,若nums[i]未大于n就说明没有遇到过数i+1,这样我们就找到了缺失的数字。
其中需要注意的是,当我们遍历到某个位置时,其中的数可能已经被增加过,因此需要对n取模来还原出它本来的值。

    public List<Integer> findDisappearedNumbers(int[] nums) {
        int n = nums.length;
        for (int num : nums) {
            int x = (num - 1) % n;
            nums[x] += n;
        }
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            if (nums[i] <= n) {
                res.add(i + 1);
            }
        }
        return res;
    }

相关文章

  • 2021.2.13每日一题

    448. 找到所有数组中消失的数字[https://leetcode-cn.com/problems/find-a...

  • Day 4 Project 我的微信好友

    附:每日一题

  • 每日复盘分享

    90/Day24/有效学习,从每日复盘分享开始 2021.2.13关键词:培训管理、培训需求分析 【培训管理篇】理...

  • 2021.2.13

    想的太多,做的太少,想做但无能为力的感觉,真的很痛苦,生为人就是要折磨自己吗?为什么看别人都那么幸福,不要和他人比...

  • 2021.2.13

    大年初二,阳光明媚。 桃桃走路越来越稳了,可以自己独立站立几秒钟,虽然仍是个走路滞后的娃。 小时候快乐是天性,长大...

  • 2021.2.13

    今天是大年初二,本是回娘家的日子。娘家在老家,也只能通过手机来跟娘家人聊天了。 肚子里的宝宝从早上就开始胎动了,今...

  • 2021.2.13

    外公的去世,正逢春节。 夫妻双人往返一趟高昂的车费也让返乡变得奢靡,所剩无几的家囊叫人羞涩至极。 因为女人一时兴起...

  • 2021.2.13

    昨天是大年初一,也是每个家庭团圆的日子。我们姐妹三个在娘家,有了一个相聚的地方和时光,和爸爸、妈妈在一起,感觉很好...

  • 2021.2.13

    大年初二得上班打卡了 读有效位点做PPT写心得 还看了新年第一场球赛 湖人总冠军 用餐券换了食物午休完去打下班卡 ...

  • 2021.2.13

    今儿个中午吃了饺子。下午趁着休息边晒太阳,边看了会儿书。我还是喜欢清闲的时光。虽然偶尔也会无聊。 晚上洗了洗衣...

网友评论

      本文标题:2021.2.13每日一题

      本文链接:https://www.haomeiwen.com/subject/vbssxltx.html