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
  • 相关阅读:
    编写ocx出现未能注册输出。请确保您有修改注册表的相应权
    电子商务网站交互设计
    浅析Spring AOP
    ubuntu aptget
    URL对SEO的影响
    向各大搜索引擎提交你的网站
    站长SEO常用查询工具
    ubuntu关机重启命令
    vi中:x和:wq的区别
    RPM/AlienHowto
  • 原文地址:https://www.cnblogs.com/immjc/p/7152372.html
Copyright © 2011-2022 走看看