448. 找到所有数组中消失的数字

85 阅读1分钟

题目:
给你一个含 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
}