题目

两数之和 - 图1

解题思路

这道题经典简单题了,毕竟第一题嘛,第一天开始刷,从数组开始没想到就刷到这一题了。

这题一看完题目肯定就做出来双重循环的解法了。

想降低时间复杂度就要想办法只循环一次,那就是要使用到Map的数据结构了。思路就是说每一次循环都是先找找map里面有没有存在着【target减去我当前指向值的另一个值】的【索引(也就是数组位置)】,如果没有就存放当前值和索引的key-value,要切记必须是值做key,索引做value。

代码

  1. class Solution {
  2. public int[] twoSum(int[] nums, int target) {
  3. int len = nums.length;
  4. Map<Integer,Integer> mp = new HashMap<Integer,Integer>();
  5. for(int i = 0; i < len; i++) {
  6. // ② map中查找是否有 target - curvalue的数据
  7. if(mp.containsKey(target - nums[i]))
  8. return new int[]{mp.get(target - nums[i]), i};
  9. // ① 数组中的每个数放入map中
  10. mp.put(nums[i], i);
  11. }
  12. return new int[0];
  13. }
  14. }