【leetcode】448. 找到所有数组中消失的数字(find-all-numbers-disappeared-in-an-array)(模拟)[简单]

2023-05-16

链接

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

耗时

解题:16 + 24 + 10 + 60 min
题解:11 + 15 + 14 + 9 min

题意

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。

找到所有在 [1, n] 范围之间没有出现在数组中的数字。

您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。

思路

id思路时间空间代码
1用 hash 表存一遍数组中的元素,然后从1到n检查一遍,将不在hash表中的元素放入结果数组 O ( n ) O(n) O(n) O ( n ) O(n) O(n)code1
2原地排序,然后从1到n遍历,同时遍历排序后的数组,并跳过数组中相同的相邻元素(相同元素最多出现2次,所以向后移一位即可),遍历地同时将数组中没有的元素放入结果数组 O ( n l o g n ) O(nlogn) O(nlogn) O ( 1 ) O(1) O(1)code2
3遍历一遍数组,如果 当前元素 和 下标+1 不等 并且 当前元素 和 下标是当前元素值-1的位置的元素 不等,则将 当前元素 和 下标是当前元素值-1的位置的元素 互换,直到有一个相等则继续遍历。最后扫描一遍数组,如果当前元素和当前位置下标+1不等,则将下标+1放入结果 O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)code3
4遍历一遍数组,如果 当前元素不是-1 并且 下标是当前元素值-1的位置的元素也不是-1,则将 当前元素 和 下标是当前元素值-1的位置的元素 互换,并把下标是当前元素值-1的位置的元素变成-1。最后扫描一遍数组,如果当前元素不是-1,则将下标+1放入结果(2021/2/13) O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)code4

AC代码

code1

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        unordered_set<int> se;
        for(auto num : nums) {
            se.insert(num);
        }
        int n = nums.size();
        vector<int> ans;
        for(int x = 1; x <= n; ++x) {
            if(se.find(x) != se.end()) continue;
            ans.push_back(x);
        }
        return ans;
    }
};

back to 思路

code2

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        vector<int> ans;
        int i = 0;
        for(int x = 1; x <= n; ++x) {
            if(i > 0 && i < n && nums[i] == nums[i-1]) i++;
            if(i == n) {
                ans.push_back(x);
                continue;
            }
            if(x == nums[i]) i++;
            else ans.push_back(x);
        }
        return ans;
    }
};

back to 思路

code3

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < n; ++i) {
            while(nums[i] != i+1 && nums[i] != nums[nums[i]-1]) {
                swap(nums[i], nums[nums[i]-1]);
            }
        }
        vector<int> ans;
        for(int i = 0; i < n; ++i) {
            if(nums[i] != i+1) {
                ans.push_back(i+1);
            }
        }
        return ans;
    }
};

back to 思路

code4

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int n = nums.size();
        int i = 0;
        while(i < n) {
            if(nums[i] == -1 || nums[nums[i]-1] == -1) {
                i++;
            }
            else {
                int pos = nums[i]-1;
                swap(nums[nums[i]-1], nums[i]);
                nums[pos] = -1;
            }
        }
        vector<int> ans;
        for(int i = 0; i < n; ++i) {
            if(nums[i] != -1) {
                ans.push_back(i+1);
            }
        }
        return ans;
    }
};

back to 思路

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】448. 找到所有数组中消失的数字(find-all-numbers-disappeared-in-an-array)(模拟)[简单] 的相关文章

  • 如何使用unix“find”命令查找所有cpp和h文件?

    我知道要找到所有 h我需要使用的文件 find name h 但如何找到所有 h AND cpp files find name h print o name cpp print or find name h o name cpp prin
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • str.find 怎么这么快?

    我之前遇到过一个问题 我在迭代字符串并使用切片时寻找子字符串 原来这是一个really关于性能的坏主意 str find速度要快得多 但我不明白为什么 import random import string import timeit Ge
  • 查找-exec选项

    比如说 我想找到一些文件并执行 chmod 并使用另一个命令对其执行某些操作 例如 find name txt exec chmod 666 cp dst it says find missing argument to exec 我该如何
  • 为什么 float() 会截掉尾随零?

    该代码成功地将一个包含许多数字的大文件裁剪为几个包含数字的较小文本文件 但它产生了一个有趣的怪癖 所有数字都应精确到小数点后四位 例如 2 7400 但它们打印为 2 74 这是文件的片段 0 96 0 53 0 70 0 53 0 88
  • 将 pandas 数据框中的所有 inf、-inf 值替换为 NaN

    我有一个大型数据框 不同列中包含 inf inf 值 我想用 NaN 替换所有 inf inf 值 我可以逐栏这样做 所以这有效 df column name df column name replace np inf np nan 但我的
  • 添加一个新列,其中标签附加到新月形数字

    我想添加一个新列 给出一个常量标签 并逐行附加新月数字逻辑 我的输入 position work chr1 jil2001 chr4 jil2001 chr3 kou2009 chr9 nai2012 chr7 fandis2005 我的预
  • 在 Dart 中查找和替换字符串

    我正在为这个应用程序使用 flutter 但我在应用程序的逻辑方面遇到了问题 任何帮助深表感谢 应用程序目标 通过以下方式将所有输入缩写解码 替换 为单词 用户通过文本框输入文本 应用程序查找任何缩写 几个 并仅用文本替换缩写 我能够使用一
  • 如何从字典列表中查找键的值?

    如何从字典列表中获取给定键的值 mylist powerpoint color blue client name Sport Parents Regrouped sort order ascending chart layout 1 cha
  • Haskell:无法预期类型“Integer”与实际类型“Int”

    我已经盯着这段代码有一段时间了 但我无法理解该错误消息 divisors Integer gt Integer divisors n t t lt 1 n mod n t 0 length a gt Integer length 0 len
  • 如何在unix中移动或复制“find”命令列出的文件?

    我有使用下面的命令看到的某些文件的列表 但是如何将列出的这些文件复制到另一个文件夹 例如 test 中 find mtime 1 exec du hc 添加到 Eric Jablow 的答案中 这是一个可能的解决方案 它对我有用 linux
  • Objective-C 原始数之间的差异

    What is the difference between objective c C primitive numbers I know what they are and how to use them somewhat but I m
  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • 列出 J 中数字的数字

    我使用的编程语言 J 我想将一个数字的所有数字放入一个列表中 From 12345 to 1 2 3 4 5 我能做些什么 我写这个的方式是 10 1 我们可以看到它与这句话的使用 10 1 123456789 1 2 3 4 5 6 7
  • 具有多个文件扩展名的查找命令

    我正在查看许多子目录 找到所有以 JPG jpg 和 png 结尾的文件 并将它们复制到一个单独的目录中 但是现在只找到 JPG 有人可以解释我做错了什么吗 find root TEST Images name png o name jpg
  • 在多个文件中进行查找/替换的最佳方法?

    最好的方法是什么 我不是命令行战士 但我想可能有一种使用方法grep and cat 我只想替换文件夹和子文件夹中出现的字符串 最好的方法是什么 如果这很重要的话 我正在运行 ubuntu 我将为使用的人提供另一个例子ag 银色搜索者 ht
  • 如何检查一个数字是否包含在一个范围内(在一个语句中)?

    我正在使用 Ruby on Rails 3 0 9 我想检查某个数字是否包含在某个范围内 也就是说 如果我有一个变量number 5我想检查一下1 lt number lt 10并检索一个布尔值 如果number值包含在该范围内 我可以这样
  • 限制 jQuery id 字符串吗?

    简而言之 我的问题是字符串在 jQuery 中作为可搜索 id 或可搜索内容有什么限制 更新 我得到了 ID 部分 但不是为什么我什至无法使用该字符串搜索 html 内容 对于任何愿意告诉我一个正则表达式来将模式从 MM dd yy HH
  • jQuery - 找不到函数?

    有人可以解释一下为什么下面的代码会抛出错误吗 JavaScript Document document ready function port box css display none ul portfolio li a bind clic
  • 使用 FIND 命令进行并集、交集和排除?

    我需要使用 find 命令管理列表 假设列表在非不同列表中具有随机名称 即它们的交集不是空集 我能怎么做 A B 查找列表A中除列表B中的文件之外的文件 A 路口 B 查找列表 A 和 B 共有的文件 请咨询here https stack

随机推荐