zoukankan      html  css  js  c++  java
  • JZ50 数组中重复的数字

    数组中重复的数字

    题目:

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1

    思路:

    时间复杂度是O(n),空间复杂度是O(1),这个数组的特点是里面的元素都是0-n-1之间的数字,如果排好序之后,应该是每个位置上的元素都和下标相等。
    依次扫描这个数组中的元素,对于下标i对于的元素为m,如果m != i,那么就将下标为m的元素和下标为i的元素进行交换,直到下标和对应的元素相等为止。
    func duplicate(numbers []int) int {
        length := len(numbers)
        if length <= 0 {
            return -1
        }
        for i := 0;i < length; i++ {
           //必须首先判断 numbers[i] != i,不然考虑已经排好序的情况,0,1,2,3,4,i= 1,numbers[1] = 1;
            //肯定numbers[numbers[i]] == numbers[i],
            for numbers[i] != i {//可能2,1,1这种没有0的情况,那么就会
                if numbers[numbers[i]] == numbers[i]  {
                    return numbers[i]
                }
                numbers[i], numbers[numbers[i]] = numbers[numbers[i]], numbers[i]
            }
        }
        return -1
    }
  • 相关阅读:
    单分发器
    Python 虚拟环境
    $modal
    memoization
    directive例子2
    UI-Router
    angular-translate
    directive例子1
    FileInputStream/FileOutputStream的应用
    自定义readLine
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642083.html
Copyright © 2011-2022 走看看