题目:
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
算法:
普通的算法有很多就不说了。这里利用了index和nums中的元素存在关系这一以及nums的元素为正数这两个特点,妙啊!
func findDisappearedNumbers(nums []int) []int {
// nums中index的值多次出现的话,value为负数
for i := range nums {
idx := abs(nums[i]) - 1
if nums[idx] > 0 {
nums[idx] = -1 * nums[idx]
}
}
ans := make([]int, 0)
for i := range nums {
if nums[i] > 0 {
ans = append(ans, i + 1)
}
}
return ans
}
func abs(n int) int {
if n < 0 {
return -1 * n
}
return n
}