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{}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值