首页 > 编程语言 > 详细

JZ50 数组中重复的数字

时间:2021-04-10 22:55:41      阅读:37      评论:0      收藏:0      [点我收藏+]

数组中重复的数字

题目:

在一个长度为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
}

 

JZ50 数组中重复的数字

原文:https://www.cnblogs.com/dingxiaoqiang/p/14642083.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!