package two_sum import ( "slices" ) type Index struct { Index int Value int } func ByValue(a, b Index) int { return a.Value - b.Value } func ToIndices(list []int) []Index { result := []Index{} for index, value := range list { result = append(result, Index{index, value}) } slices.SortFunc(result, ByValue) return result } // https://leetcode.com/problems/two-sum/description/ func TwoSum(nums []int, target int) []int { numbers := ToIndices(nums) lower, upper := 0, len(numbers)-1 for lower < upper { current_sum := numbers[lower].Value + numbers[upper].Value if current_sum < target { lower++ } else if current_sum > target { upper-- } else { return []int{ numbers[lower].Index, numbers[upper].Index, } } } return nil }