zoukankan      html  css  js  c++  java
  • LeetCode 448. 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 要不要排序? 如果要排序, 则线性运行时间的排序算法一定会消耗额外的存储空间。

    所以存在不需要排序的算法。

    2 曾尝试找相同元素,但该方法也不可行。

    1 计数排序。

    class Solution {
        public List<Integer> findDisappearedNumbers(int[] nums) {
            
            int[] counts = new int[nums.length];
            
            for(int i=0; i<nums.length; i++) {
                counts[nums[i]-1]++;
            }
            
            List<Integer> returnList = new ArrayList<Integer>();
            for(int i=0; i<nums.length; i++) {
                if(counts[i]==0) {
                    returnList.add(i+1);
                }
            }
            
            return returnList;
        }
    }

    result:

    分析:

    虽然知道可以不用排序,但找不到这种方法是什么。。

    看了discuss区的讨论,知道了可以使用负数来表示看见过的数(nums[i]<0表示看到过i)。 真的是很巧妙的方法。

    second try:

    class Solution {
        public List<Integer> findDisappearedNumbers(int[] nums) {
            
             
            for(int i=0; i<nums.length; i++) {
                int val = Math.abs(nums[i]);
                if(0<nums[val-1]) {
                    nums[val-1] = - nums[val-1];
                }
            }
            
            List<Integer> returnList = new ArrayList<Integer>();
            for(int i=0; i<nums.length; i++) {
                if(0<nums[i]) {
                    returnList.add(i+1);
                }
            }
            
            return returnList;
        }
    }

    result:

    conclustion:

    LeetCode中问你是否能找到一个空间复杂度。。的算法,一般是不做强制要求的。我觉得如果想检测提交算法的空间复杂度,还是能做到的。只是没有去做。

  • 相关阅读:
    ASP.NET中JS简单调用webservices的方法
    WINDOWS SERVER 2003使用IIS服务配置WEB站点(转)
    Tomcat安装配置(转)
    javascript 调用.net后台的数据 和方法
    win7下,sql2005安装,提示 iis功能和com+目录要求 的解决
    Vista或windows7远程桌面控制服务器较慢 反应迟钝
    Asp.net Ajax的使用
    记录远程登陆用户的IP
    Ext.menu.Menu 属性及基础应用
    关于VS2005 无法使用切换到设计视图的解决方法
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8870137.html
Copyright © 2011-2022 走看看