leetcode刷题笔记——两数之和(简单)

题目:两数之和
难度:简单
分类:数组,哈希表
解决方案:暴力求解、HashMap

力扣的第一道题也是很经典的题目据说大厂面试的时候问到过
暴力求解非常好想,一个双重循环即可

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res=new int[2];
        for (int i = 0; i 

leetcode刷题笔记——两数之和(简单)_第1张图片
但是这种方法并不好呀~
人家提供了一种更优解用HashMap (太久没写代码我已经手生的没办法了),学习一下
该题中需要返回的是数组下标,因此不能破坏数组中的位置关系,如果将数组进行排序则会破坏数组的位置关系,不能满足题目的要求。如何将数组的值与数组的位置关系进行绑定,是这个题目的关键。在java中可以通过HashMap来实现
具体思路如下:

1.遍历数组建立HashMap映射,其中HashMap的key为数组的值,value为数组的位置,即;
2.查找是否存在两个数之和等于target:
   2.1遍历数组,得到第一个数字nums[i],记为num1,该数字在数组中的位置为i
   2.2计算target-nums[i],计算结果为另一个需要的数字num2,若该数字存在,该数字在数组中的位置为hashMap.get(num2)
   2.3在HashMap中判断num2是否存在:
       若不存在,则跳转至2.1
       若存在,则判断num1与num2对应的value是否相等:
                   若相等,则跳转至2.1
                   若不相等,则找到这两个数num1+num2=target ,返回对应的数组位置

实现代码如下

 public static int[] tS(int[] nums,int target){
        int[] res=new int[2];
        Map map=new HashMap();
        //1.建立HashMap映射
        for (int i = 0; i 

改进后执行的情况,(果然好很多哎)
leetcode刷题笔记——两数之和(简单)_第2张图片
整个算法流程是时间复杂度为O(n),由于使用了HashMap申请了内存空间,其空间复杂度为O(n)。
ok,第一道题结束!

你可能感兴趣的:(leetcode)