• leetcode之Find All Numbers Disappeared in an Array


    引用:http://blog.csdn.net/yutianzuijin/article/details/53861485

    本文主要解析《Find All Numbers Disappeared in an Array》,顺便简单解释一下《Find All Duplicates in an Array》。 
    该题的含义是:给定一个长度为n的数组,数组元素是1~n。但是有些元素出现一次,有些元素出现两次,从而也会导致有些元素不出现。现在让我们找到哪些元素没有出现。另外一个题目是让我们找到出现两次的元素。时间复杂度O(n),空间复杂度O(1)。

    第一种方法是—元素归位法。元素归位法很容易理解,就是将n个元素交换到它应该在的位置。例如,元素5就放到位置4(下标从0开始)。这里需要注意一点,将某个元素交换到正确位置可能会导致当前位置的元素还不在正确位置,需要继续交换直到不能交换为止。

    public static void xx() {
    for (int i = 0; i < A.length; i++) {
    if (A[i] != (i + 1)) {
    swap(i, A[i] - 1);
    }
    }

    for (int i = 0; i < A.length; i++) {
    if (A[i] != i + 1) {
    A[A[i] - 1] += A[i];
    }
    }

    for (int i = 0; i < A.length; i++) {
    System.out.println((i + 1) + " " + A[i] + " occurs " + (A[i] / (i + 1)) + " times.");
    }
    }

    第二种方法是取余法:

    public static void sss(int[] n) {
    int length = n.length;

    for (int i = 0; i < length; i++) {
    n[i]--;//和下标匹配,因为从1开始。如果是从0开始,就不需要了
    }

    for (int i = 0; i < length; i++) {
    n[n[i] % length] += length;
    }

    for (int i = 0; i < length; i++) {
    System.out.println((i + 1) + " " + n[i] + " occurs " + (n[i] / length) + " times.");
    }
    }

  • 相关阅读:
    struts2_20140720
    使用jsp生成验证码
    JAVA笔记1-00
    Myeclipse 2014配置SVN详细图解
    排查IDEA 全局搜索快捷键Ctrl +Shift+F不起作用的原因和解决方法
    linux,java.net.UnknownHostException:XXX:XXX: Name or service not known
    mac使用技巧
    谈创业
    小白3步完成替换tomcat域名
    linux下yum安装redis以及使用
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/8310856.html
Copyright © 2020-2023  润新知