zoukankan      html  css  js  c++  java
  • LeetCode——Find All Numbers Disappeared in an Array

    LeetCode——Find All Numbers Disappeared in an Array

    Question

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

    Find all the elements of [1, n] inclusive that do not appear in this array.

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

    Example:

    Input:
    [4,3,2,7,8,2,3,1]

    Output:
    [5,6]

    Solution

    用hash table求解。

    Answer

    class Solution {
    public:
        vector<int> findDisappearedNumbers(vector<int>& nums) {
            map<int, int> dict;
            for (int i : nums)
                dict[i]++;
            vector<int> res;
            for (int i = 1; i <= nums.size(); i++)
                if (dict[i] == 0)
                    res.push_back(i);
            return res;
        }
    };
    

    时间复杂度O(2n)。 网上给出了另外一种解答:

    The idea is very similar to problem 442. Find All Duplicates in an Array: https://leetcode.com/problems/find-all-duplicates-in-an-array/.

    First iteration to negate values at position whose equal to values appear in array. Second iteration to collect all position whose value is positive, which are the missing values. Complexity is O(n) Time and O(1) space.

    class Solution {
    public:
        vector<int> findDisappearedNumbers(vector<int>& nums) {
            int len = nums.size();
            for(int i=0; i<len; i++) {
                int m = abs(nums[i])-1; // index start from 0
                nums[m] = nums[m]>0 ? -nums[m] : nums[m];
            }
            vector<int> res;
            for(int i = 0; i<len; i++) {
                if(nums[i] > 0) res.push_back(i+1);
            }
            return res;
        }
    };
    

    它的意思是数组中有这个数,那么对应位置的数就会变成负的,如果数组中缺失某个数,那么这个数对应位置的数最后就是正的。所以,凡是最后为正的数的位置都是缺失的数。

  • 相关阅读:
    springboot整合mybatisplus
    在layui中使用treetable.js插件
    shiro系列9:基于前端的权限控制和基于后端的权限控制
    springboot文件上传案例
    springboot配置虚拟路径访问上传到磁盘的文件
    springboot文件下载案例
    springboot跨域的处理方式
    springboot上传文件过大的解决方案
    Django与Ajax
    Django查询数据库性能优化
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/6658609.html
Copyright © 2011-2022 走看看