leetcode算法题--和为s的两个数字

原题链接:https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/

一开始hash表做,但是忽略了题目中递增数组的条件,此做法时间和空间复杂度为O(n)

func twoSum(nums []int, target int) []int {
    mp := make(map[int]int) 
    for _, num := range nums {
       tmp := target - num 
       if _, ok := mp[tmp]; ok{
           return []int{num, tmp}
       }
       mp[num] = 1
    } 

    return []int{}
}

可以用双指针法降低空间复杂度为O(1)

func twoSum(nums []int, target int) []int {
    n := len(nums)
    i, j := 0, n - 1 
    for i < j {
       num1 := nums[i] 
       num2 := nums[j]
       sum := num1 + num2
       if sum == target {
          return []int{num1, num2} 
       } else if sum > target {
           j--
       } else if sum < target {
           i++
       }
    }

    return []int{}
}

你可能感兴趣的:(Algorithm,算法,leetcode,数据结构)