6.15数组中重复数字 - WisperDin/blog GitHub Wiki
描述
面试题3(一):找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了, 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3}, 那么对应的输出是重复的数字2或者3。
思路
由于**数据的范围仅限于0 - n-1 **,并且要求输出一个重复的即可,可以扫描数组,将每个元素交换至其value对应的数组位置中,每次交换前查看要交换的位置里面的值与交换值是否相同,相同则出现重复 通过此法实现 时间复杂度O(N) 空间复杂度O(1)
实现
func DuplicationInArray(arr []int)(int,bool){
if len(arr)<=0 {
return -1,false
}
for i:=0;i<len(arr)-1;i++ {
for arr[i] != i {
//the place want to swap contain value
if arr[i] == arr[arr[i]] {
return arr[i],true
}
arr[i],arr[arr[i]] = arr[arr[i]],arr[i]
}
}
return -2,false
}
总结
注意题目中比较特别的条件限制,往往是算法实现的关键前提