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

    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]

    找出数组中消失的数,首先一个关键条件是1 ≤ a[i] ≤ n (n = size of array),一些元素出现2次,另一些元素出现1次。找出没有出现的数字。设想这道题中数组元素和数组索引肯定有关,数组元素 1~n, 数组索引 0~n-1, 令idx = abs(nums[i]) - 1, 这一数组元素与数组索引对应关系,如果有重复的数组元素,则对应的数组索引必重复。找出数组中消失的索引,从而找到数组中消失的数。出现过的索引对应的元素都变成为负值,遍历一遍数组找出值为正的元素,令其索引+1即可。

    class Solution {
    public:
        vector<int> findDisappearedNumbers(vector<int>& nums) {
            vector<int> res;
            for (int i = 0; i != nums.size(); i++) {
                int idx = abs(nums[i]) - 1;
                if (nums[idx] > 0)
                    nums[idx] = -nums[idx];
            }
            for (int i = 0; i != nums.size(); i++) 
                if (nums[i] > 0) 
                    res.push_back(i + 1);
            return res;
        }
    };
    // 129 ms
  • 相关阅读:
    1.saltstack入门
    构造函数
    gitlab
    mysql常见的问题
    python数据运算
    BZOJ 1691 usaco2007 挑剔的美食家
    BZOJ 1708 usaco2007 Money奶牛的硬币
    BZOJ 1050 HAOI2006 旅行comf
    BZOJ 2427 HAOI2010 软件安装
    BZOJ 1901 Dynamic Rankings
  • 原文地址:https://www.cnblogs.com/immjc/p/7152372.html
Copyright © 2011-2022 走看看