最近参加了一下zj的青训营,时间和周赛冲突了,只能刷每日一题了,周赛有时间会补上的,下面进入正题
题目:
给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。
你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。
func findDuplicates(nums []int) (ans []int) {
// nums[i] 放在对应下标-1的位置
for i := range nums {
for nums[i] != nums[nums[i]-1] {
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
}
}
// 只出现一次的元素已经放置在对应位置,下标与对应的值不相等即为重复元素
for i, num := range nums {
if num-1 != i {
ans = append(ans, num)
}
}
return
}
这下是真的入坑了😭