• 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.");
    }
    }

  • 相关阅读:
    Shared variable in python's multiprocessing
    File checksum
    Windows createprocess linux fork
    人工调用系统调用
    如何提高团队开发效率
    Redis' High Availability
    并发MD5计算方法
    开博宣言
    NYOJ 55 懒省事的小明
    HDU 1237 简单计算器
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/8310856.html
Copyright © 2020-2023  润新知