【Day 2】LeetCode 1.两数之和

大家好,我是听雨,是一名跨考计算机专业的研一学生。为提高编程的水平,计划每天刷编程题目。由于我是算法小白,所以开始只能从简单题开始写贴,请大家多多包涵,希望和大家一起进步

文章目录


题目

今天的第二题为 力扣1. 两数之和

解题思路

这是力扣中的第一题,比较基础。相信没写过算法的小伙伴也可以通过枚举求出结果,只需要两层for循环即可啦,但这样写要的时间复杂度是 O ( n 2 ) O(n^2) O(n2),能否再快一点呢? 答案是肯定的,在数据结构中HashMap查找元素的时间为 O ( 1 ) O(1) O(1) ,原理点这里。利用这一点我们只要遍历一次数组便可以得到结果。将HashMap的键值对设置为 [nums[i],i],对于当前元素在哈希表中查找是否有 target - nums[i] 的键,如果存在,说明找到了结果,返回即可。如果不存在,则将该值加入哈希表。

代码如下:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap();
        int[] res = new int[2];
        for(int i = 0 ; i < nums.length; i ++){
            if(map.containsKey(target - nums[i])){
                res[0] = map.get(target - nums[i]);
                res[1] = i;
                return res;
            }
            map.put(nums[i],i);
        }
        //为了程序可以执行,实际上这行代码不会执行
        return res;
    }

这样跑出来的结果为:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b706c50b60b44f829c47af61f83df7fa.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值