美文网首页
TwoSum 问题

TwoSum 问题

作者: shane51 | 来源:发表于2018-05-23 23:00 被阅读11次

https://leetcode.com/problems/two-sum/description/

思路:

  1. 计算差值
  2. 找出差值index

数据结构 与 复杂度

  1. Array 时间复杂度n的2次方,空间1
  2. Map 时间复杂度n,空间n

遇到的问题

  1. nums = [3, 2, 4] ; targe = 6
    每个元素只能使用一次,用数组做双重循环不会有问题,因为j可以从1开始,但是对于Map就会有问题,必须保证map[diff] != i 。

考虑边界情况

  1. nums = [3,3]; target = 6
    计算时,先计找当前map里有没有,没有找下一个。避免当值都一样时,找到永远index都是0.

考虑计算顺序

  1. 使用双重循环时
    注意j的初始值为i+1,因为组合过的不用再判断。
  2. map的两种解法:
  • 用两个循环,先把所有的结果都放到map里,对比nums array和map,如果有值相同,则会只保留最有一个,避免了问题2种的情况
  • 当值用一个循环时,查找map[diff]时,因为num[i]还没有存在buff_diff 中,所以避免了自己被再次选中的情况而被问题1的条件直接过滤掉。

总结

是否应该先考虑testcase,在写算法合适?

另外, 用两个循环从可读性上,来讲更加好。

java 语言上犯过的错误

  1. java 创建数组,需要new,且需要给出数组长度,或者给出具体的数组内容
int[] myArray = new int[2]
int[] myArray = new int[]{1,2}
int[] myArray = {1,2}
  1. 抛异常的方法
    throw new IllegalArgumentException("nums is incorrect")

  2. java语句是需要;闭合

  3. 任何情况下创建变量一定要声明类型,特别是for循环里,还要赋初值

for(int i=0; i<10;i++) {
    //todo
}
  1. java 泛型声明参数化类型时必须时类型的类名,如一个key/value都是int的map的声明是:
    Map<Integer, Integer> map = new HashMap<>() 而不是
    Map<int, int> map = new HashMap<>()

相关文章

  • TwoSum 问题

    https://leetcode.com/problems/two-sum/description/ 思路: 计算...

  • 刷题笔记06-20

    经典的twosum问题变种,传入已排序的序列 题目如下 Given an array of integers th...

  • 双指针

    双指针问题总结 双指针经典问题 twoSum (有序数组) 字符串翻转 先看一个例子: leetcode 345....

  • TwoSum

    题目大意: 找到数组中两个元素相加等于指定数的所有组合 情况一:给定数组中不含重复元素,且均为正整数 思路: 使用...

  • twoSum

    Problem Given an array of integers, return indices of the...

  • TwoSum

    刷题当然要从TwoSum开始了~~python刷题果然容易~~~class Solution(object):de...

  • TwoSum

    介绍:Two Sum给定一个整型数组,找出能相加起来等于一个特定目标数字的两个数。函数 twoSum 返回这两个相...

  • TwoSum

  • TwoSum

    Problem### Given an array of integers, find two numbers s...

  • TwoSum

    简单方法,两边循环,一个推着另一个,复杂度n2 使用map,检查过的存起来map,每拿到一个新的,就去map里查,...

网友评论

      本文标题:TwoSum 问题

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