442.数组中重复的数据
442.数组中重复的数据
题解
题目:给一个数组,返回数组中出现两次的数,数是1-n的,并且只出现一次或两次,要求常数的时间复杂度
思路:
1.数组下标0~n-1 数值大小1-n 2.如果v出现过,把v-1下标处的值置为负数 3.如果v-1下标处的值本来就是负数,说明v这个值是第二次遍历到了 4.将v添加到答案中
代码
func findDuplicates(nums []int) (ans []int) { for i := 0; i < len(nums); i++ { v := abs(nums[i]) if nums[v-1] < 0 { ans = append(ans, v) } else { nums[v-1] *= -1 } } return } func abs(i int) int { if i < 0 { return -i } return i }