加载中...
448-找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
发表于:2021-12-03 | 分类: 简单
字数统计: 217 | 阅读时长: 1分钟 | 阅读量:

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

英文原文

Given an array nums of n integers where nums[i] is in the range [1, n], return an array of all the integers in the range [1, n] that do not appear in nums.

 

Example 1:

Input: nums = [4,3,2,7,8,2,3,1]
Output: [5,6]

Example 2:

Input: nums = [1,1]
Output: [2]

 

Constraints:

  • n == nums.length
  • 1 <= n <= 105
  • 1 <= nums[i] <= n

 

Follow up: Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.

中文题目

给你一个含 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) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。

通过代码

高赞题解

  1. 将数组元素对应为索引的位置加n

  2. 遍历加n后的数组,若数组元素值小于等于n,则说明数组下标值不存在,即消失的数字


class Solution {

public:

    vector<int> findDisappearedNumbers(vector<int>& nums) {

        vector<int> res;

        if(nums.empty()) return nums;

        for(int i=0;i<nums.size();i++)

        {

            int index=(nums[i]-1)%nums.size();

            nums[index]+=nums.size();

        }

        for(int i=0;i<nums.size();i++)

        {

            if(nums[i]<=nums.size())

                res.push_back(i+1);

        }

        return res;

    }

};

统计信息

通过次数 提交次数 AC比率
147584 226911 65.0%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言

相似题目

题目 难度
缺失的第一个正数 困难
数组中重复的数据 中等
上一篇:
447-回旋镖的数量(Number of Boomerangs)
下一篇:
449-序列化和反序列化二叉搜索树(Serialize and Deserialize BST)
本文目录
本文目录