TwoSum 问题

2018-05-23  本文已影响11人  shane51

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的两种解法:

总结

是否应该先考虑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<>()
上一篇下一篇

猜你喜欢

热点阅读