Go: 如何交换 slice 中的两个元素?

这两段代码的结果为什么不一样:

package main
import (
        "fmt"
)

func main() {
        test := []int{2, 1, 1}
        fmt.Println(findDuplicate(test))
}
func findDuplicate(nums []int) int {
    for i := 0; i < len(nums); i++ {
        if nums[i] != i+1 {
            if nums[i] == nums[nums[i]-1] {
                return nums[i]
            }
            /*
            tmp := nums[i]
            nums[i] = nums[nums[i]-1]
            nums[nums[i]-1] = tmp
            */
             nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
        }
    }
    return 0
}

以上代码输出的结果是 1

package main
import (
        "fmt"
)

func main() {
        test := []int{2, 1, 1}
        fmt.Println(findDuplicate(test))
}
func findDuplicate(nums []int) int {
    for i := 0; i < len(nums); i++ {
        if nums[i] != i+1 {
            if nums[i] == nums[nums[i]-1] {
                return nums[i]
            }
          
            tmp := nums[i]
            nums[i] = nums[nums[i]-1]
            nums[nums[i]-1] = tmp
          
            //nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
        }
    }
    return 0
}

以上代码输出的结果是 0

我的 Go 版本是 Go 1.8

查看回复