美文网首页
2Sum算法

2Sum算法

作者: async丶 | 来源:发表于2019-11-07 18:03 被阅读0次
给一个整型数组和一个目标值,判断数组中是否有两个数字之和等于目标值。

这道题是传说中经典的 “2Sum”,我们已经有一个数组记为 nums,也有一个目标值记为 target,最后要返回一个 Bool 值。

最粗暴的方法就是每次选中一个数,然后遍历整个数组,判断是否有另一个数使两者之和为 target。这种做法时间复杂度为 O(n^2)。

采用集合可以优化时间复杂度。在遍历数组的过程中,用集合每次保存当前值。假如集合中已经有了目标值减去当前值,则证明在之前的遍历中一定有一个数与当前值之和等于目标值。这种做法时间复杂度为 O(n),代码如下

func twoSum(nums: [Int], _ target: Int) -> Bool {
  var set = Set<Int>()

  for num in nums {
    if set.contains(target - num) {
      return true
    }

    set.insert(num)
  }

  return false
}

如果把题目稍微修改下,变为

给定一个整型数组中有且仅有两个数字之和等于目标值,求两个数字在数组中的序号

思路与上题基本类似,但是为了方便拿到序列号,我们采用字典,时间复杂度依然是 O(n)。代码如下。

func twoSum(nums: [Int], _ target: Int) -> [Int] {
  var dict = [Int: Int]()

  for (i, num) in nums.enumerated() {
    if let lastIndex = dict[target - num] {
      return [lastIndex, i]  
    } else {
      dict[num] = i
    }
  }

  fatalError("No valid output!")
}

相关文章

  • 2Sum算法

    给一个整型数组和一个目标值,判断数组中是否有两个数字之和等于目标值。 这道题是传说中经典的 “2Sum”,我们已经...

  • K-sum

    1. 2sum: Given an array of integers, return indices of th...

  • 2Sum problem

    Given an array of integers, find two numbers such that th...

  • Ksum 问题

    Ksum,用backtracking来做,转换成1sum or 2sum, 3Sum: https://leetc...

  • iOS常见算法1:2Sum问题(Swift语言实现)

    给一个整型数组和一个目标值,判断数组中是否有两个数字之和等于目标值分析:(1)如果每次选中一个数,然后遍历整个数组...

  • 数组

    数组题目总结 sum类型的题 leetcode 2sum leetcode 15. 3Sum思路:将3sum转化成...

  • Leetcode #18 4Sum

    类似这种k-sum的题,都简化为sorted array的2sum问题,即利用two pointers, 一个头,...

  • [LintCode][2Sum] Triangle Count

    Problem More DiscussionsGiven an array of integers, how m...

  • 2sum 3sum

    两数之和(2sum) 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标...

  • [M]Leetcode-16-3Sum Closest

    思路: 类似3sum/2sum利用双指针。不同在于,这里只要计算总和就可以了,这部分更加简单。总体的思路是:先预先...

网友评论

      本文标题:2Sum算法

      本文链接:https://www.haomeiwen.com/subject/zmrebctx.html