package main
import ( ?? ?"fmt" ?? ?"sort" )
func twoSum(nums []int, target int) []int { ?? ?var locs []int ?? ?var start = 0 ?? ?var end = len(nums) ?? ?var sum = 0 ?? ?// 排序 ?? ?oldNums := make([]int, end) ?? ?copy(oldNums, nums) ?? ?sort.Ints(nums) ?? ?// fmt.Println(nums)
?? ?for { ?? ??? ?if start >= end-1 { ?? ??? ??? ?break ?? ??? ?} ?? ??? ?sum = nums[start] + nums[end-1] ?? ??? ?if sum == target { ?? ??? ??? ?// locs = append(locs, start) ?? ??? ??? ?// locs = append(locs, end-1) ?? ??? ??? ?break ?? ??? ?} else if sum > target { ?? ??? ??? ?end -= 1 ?? ??? ??? ?continue ?? ??? ?} else if sum < target { ?? ??? ??? ?start += 1 ?? ??? ??? ?continue ?? ??? ?}
?? ?} ?? ?// 找出排序后两个元素对应原来数组的位置
?? ?for idx, num := range oldNums { ?? ??? ?if num == nums[start] { ?? ??? ??? ?start = idx ?? ??? ??? ?locs = append(locs, idx) ?? ??? ??? ?break ?? ??? ?} ?? ?} ?? ?for idx, num := range oldNums { ?? ??? ?if num == nums[end-1] && idx != start { ?? ??? ??? ?locs = append(locs, idx) ?? ??? ??? ?break ?? ??? ?} ?? ?}
?? ?return locs }
func main() { ?? ?//nums := []int{3, 2, 4} ?? ?//target := 6
?? ?//nums := []int{2, 7, 11, 15} ?? ?//target := 9
?? ?nums := []int{3, 2, 3} ?? ?target := 6 ?? ?fmt.Println(twoSum(nums, target)) } ?
|