Skip to content

Latest commit

 

History

History
33 lines (30 loc) · 985 Bytes

645.md

File metadata and controls

33 lines (30 loc) · 985 Bytes

Set Mismatch

解法一

鸽巢理论

// 解法就是鸽子理论,代表的数字到自己的索引值去(本题是数字-1对应索引因为没有0)
// 然后那些不该在自己巢里的就是重复的,这个巢本身该有的但是没有的就是缺失的。
func findErrorNums(nums []int) []int {
    if len(nums) == 0 {
        return nil
    }

    result := make([]int,0)
    for i := 0; i < len(nums);i++ {
        for i != nums[i] -1 && nums[nums[i] - 1] != nums[i] {
            // 这里的for是为了避免比如已经在自己的索引值上的,
            // 然后第二个是自己的索引值已经有了自己一样的数字的
            // 然后也不用再交换了。
            swap(nums,i,nums[i]-1)
        }
    }
    for i := range nums {
        if nums[i] - 1 != i {
            result = append(result,nums[i],i+1)
        }
     }
     return result
}

func swap(nums []int,a,b int){
    nums[a],nums[b] = nums[b],nums[a]
}