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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

原题链接https://.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{}
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6