统计数组中的元素 - 1.【645】 错误的集合
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
思路1: 数组作为哈希表
题目让你找到重复的值和丢失的值,即最终让你 return {same, loss}
我们可以使用一个数组作为哈希表,数组的key存放目前nums的所有的值,每存放一个,其key对应的value += 1, 当array[nums[i]] >= 2的时候,说明nums[i]是相同的值。记为same。
接下来我们要找出loss的值。我们可以遍历array[i],i从1开始,目的是找出array[i] = 0的这个i,这个i就是缺失的值啊。因为其他的值我们都记录在array中了且至少value标记为1的。所以这个没有被赋值的、默认为0的值的这个就是我们要找的。
func findErrorNums(nums []int) []int {
var array [100001]int // 定义一个符合题目要求的数组,key用来记录1~n
same, loss := 0,0
for i:=0;i<len(nums);i++{ //遍历nums
array[nums[i]] += 1 //将每个nums[i]存放进数组作为下标
if array[nums[i]] >= 2 { //如果遇到两次,则为相同的,存放为same
same = nums[i]
}
}
i := 1 // 准备遍历array
for {
if array[i] == 0 { // array[i]中没有记录说明是丢失的的
loss = i // 找到loss
return []int{same, loss} //这里可以直接返回了。或者你break然后再返回也行
}
i++
}
return nil
}