leetcode刷题日记
2023年行情太差,记录努力的自己
剑指 Offer 03. 数组中重复的数字
//方法1
func findRepeatNumber(nums []int) int{
var res int
numap:=make(map[int]int)
for i:=range nums{
if _,ok:=numap[nums[i]]; ok{
res=nums[i]
break
}
numap[nums[i]]++
}
return res
}
//方法2
func findRepeatNumber(nums []int) int {
for i:=0;i<len(nums);i++{
for nums[i]!=i{
if nums[nums[i]]==nums[i]{
return nums[i]
}
nums[i],nums[nums[i]] = nums[nums[i]],nums[i]
}
}
return 1
}
详解:
方法1:最简单的就是使用字典的key或者不重复列表来做,比较简单,就不多说了
方法2:遍历数组,如果数组的元素值不等于其下标,就交换让该元素到等于其值的下标位置。比如,原数组2,3,1,0,2,5,num[0]为2,不等于,发生交换,即nums[0], nums[nums[0]]=nums[nums[0]], nums[0],交换过后变为1,3,2,0,2,5,但是此时num[0]为1,仍然不等于0,所以要继续交换,这也是为什么 要写为 for nums[i]!=i , 而不是** if nums[i]!=i**,要交换到相等为止。