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
  • 相关阅读:
    玛里苟斯[清华集训2014 Day1]
    bzoj3585 mex
    Luogu 3793 由乃救爷爷
    Luogu5221 Product
    bzoj1834 [ZJOI2010]network 网络扩容
    CF650C Table Compression
    bzoj3211 花神游历各国
    bzoj1066 [SCOI2007]蜥蜴
    hdu2121 Ice_cream's world II
    Luogu2792 [JSOI2008]小店购物
  • 原文地址:https://www.cnblogs.com/immjc/p/7152372.html
Copyright © 2011-2022 走看看