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

这篇具有很好参考价值的文章主要介绍了Leetcode448. 找到所有数组中消失的数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Every day a leetcode

题目来源:448. 找到所有数组中消失的数字

解法1:STL set

set 是一个集合类型的容器,里面的元素具有唯一性,并且所有元素都会根据元素的键值自动被排序,以红黑树为底层数据结构。

我们使用集合set记录nums数组的元素,再遍历set找出找到所有的数组nums中消失的数字。

代码:

/*
 * @lc app=leetcode.cn id=448 lang=cpp
 *
 * [448] 找到所有数组中消失的数字
 */

// @lc code=start
class Solution
{
public:
    vector<int> findDisappearedNumbers(vector<int> &nums)
    {
        int n = nums.size();
        set<int> s;
        vector<int> ans;
        for (int i = 0; i < n; i++)
            s.insert(nums[i]);
        for (int i = 1; i <= n; i++)
            if (s.find(i) == s.end())
                ans.push_back(i);
        return ans;
    }
};
// @lc code=end

结果:

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

复杂度分析:

时间复杂度:O(n),其中n为数组nums的元素个数。

空间复杂度:O(n),其中n为数组nums的元素个数。

解法2:原地修改

由于nums 的数字范围均在 [1,n] 中,我们可以利用这一范围之外的数字,来表达「是否存在」的含义。

具体来说,遍历 nums,每遇到一个数 x,就让 nums[x−1] 增加 n。由于 nums 中所有数均在 [1,n] 中,增加以后,这些数必然大于 n。最后我们遍历 nums,若 nums[i] 未大于 n,就说明没有遇到过数 i+1。这样我们就找到了缺失的数字。

注意,当我们遍历到某个位置时,其中的数可能已经被增加过,因此需要对 n 取模来还原出它本来的值。

代码:

/*
 * @lc app=leetcode.cn id=448 lang=cpp
 *
 * [448] 找到所有数组中消失的数字
 */

// @lc code=start
// class Solution
// {
// public:
//     vector<int> findDisappearedNumbers(vector<int> &nums)
//     {
//         int n = nums.size();
//         set<int> s;
//         vector<int> ans;
//         for (int i = 0; i < n; i++)
//             s.insert(nums[i]);
//         for (int i = 1; i <= n; i++)
//             if (s.find(i) == s.end())
//                 ans.push_back(i);
//         return ans;
//     }
// };
class Solution
{
public:
    vector<int> findDisappearedNumbers(vector<int> &nums)
    {
        int n = nums.size();
        for (auto &num : nums)
        {
            int x = (num - 1) % n;
            nums[x] += n;
        }
        vector<int> ret;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] <= n)
            {
                ret.push_back(i + 1);
            }
        }
        return ret;
    }
};
// @lc code=end

结果:

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

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。文章来源地址https://www.toymoban.com/news/detail-435785.html

到了这里,关于Leetcode448. 找到所有数组中消失的数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每日一题——找到消失的数字

    题目链接 一个长度为 n 的数组中所有数据的范围在 [1,n] 内,题目要求我们找出在 [1,n] 范围内,但数组中没有出现的数字 如果可以使用额外空间,那这题就好办了。我们直接创建一个相同大小的数组,数组的每个位置代表 [1,n] 的每个元素,然后遍历数组计数就行。 我们这里

    2024年02月15日
    浏览(38)
  • leetcode刷题:消失的数字

    数组 nums 包含从 0 到 n 的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 注意: 本题相对书上原题稍作改动 示例 1: 示例 2: 针对于这道题,我们提供了三种解法: 首先使用快排对数组进行排序,使其变成有序数组,由题意得

    2024年01月24日
    浏览(39)
  • 【leetcode】消失的数字

    大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 点击查看题目 通过2个for循环,遍历查找0-n中缺少的数字,比较简单,不写,时间复杂度为O(N^2) 点击去了解异或,位置在④.3 异或:两个整数的相同位置:相同为0,不

    2024年01月22日
    浏览(43)
  • leetcode消失的数字

    数组 nums 包含从 0 到 n 的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在 O ( n ) O(n) O ( n ) 时间内完成吗? 示例 1: 输入:[3,0,1] 输出:2 leetcode链接:消失的数字 ⭕️ 思路1: 第一种思路时间复杂度 O ( N ) O(N) O ( N ) ,空间复杂度 O ( N ) O(N) O ( N ) 。

    2024年02月11日
    浏览(35)
  • 【数据结构刷题】消失的数字和轮转数组

    目录 一.消失的数字  方法一:异或全部元素 方法二:利用等差数列求和-该数组全部元素之和。 二.轮转数组 题型1:实现一个函数,可以左旋字符串中的k个字符。 写法1:暴力求解 根据该题写出右旋转 写法2:三步旋转法(左逆序,右逆序,整体逆序)  根据左旋转写右旋转 题型

    2024年02月16日
    浏览(40)
  • 【快乐手撕LeetCode题解系列】——消失的数字

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不

    2024年02月01日
    浏览(33)
  • 438. 找到字符串中所有字母异位词【异位词-哈希数组】

    438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s = “cbaebabacd”, p = “abc” 输出: [0,6] 解释: 起

    2023年04月27日
    浏览(40)
  • LeetCode:面试题:消失的数字——时间复杂度

    题目:数组nums中包含0~n的所有整数,但其中缺失了一个数,请写代码找出那个缺失的整数,要求在时间复杂度为O(N)的时间内完成 思路1:冒泡排序+遍历(下一个数不等于上一个数+1,这个下一个数就是消失的数) 世间复杂度O(logN*N) 代码: 运行结果: 思路2:0+N利用等

    2024年02月16日
    浏览(39)
  • 如何找到数组中出现指定次数的数字?

    一个数组中有一种数出现了奇数次, 其他数都出现了偶数次, 怎么找到这个种数? 在线OJ: LeetCode136. 只出现一次的数字 解题思路: 因为 a ^ a = 0 , 所以出现过偶次的数异或结果都是 0 , 又因为 0^a=a , 所以把数组中所有的数进行 异或 以后的结果, 就是出现了奇数次的那个数. 代码实

    2024年02月06日
    浏览(38)
  • (C语言版)力扣(LeetCode)面试题 17.04. 消失的数字5种解法

    该题目取自力扣(LeetCode)面试题 17.04. 消失的数字 链接:消失的数字 该题目主要考察时间复杂度的把握,题目如下: 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 注意:本题相对书上原题稍作改动 示例

    2023年04月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包