leetcode第一题两数之和

本文对比了使用暴力破解法和哈希表在解决两数之和问题上的效率,指出哈希表由于查找速度快,更适合此题。介绍了两种方法的实现细节和结果分析。
摘要由CSDN通过智能技术生成

两数之和

方法一

首先想到的第一种方法是使用暴力破解法,算法的时间复杂度太高

public static int[] twoSum1(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = 1; j < nums.length; j++) {
                if(nums[i]+nums[j] == target){
                    return new int[]{i,j};
                }
            }
        }
        return null;
    }

上面的方法使用了两个for循环,一个从数组第一个元素开始遍历,一个循环从数组第二个开始遍历,如果取到的两个数相加的结果等于了target的话,就直接返回一个新数组,数组内容是i,j

方法二

学过数据结构的话都知道,查找效率较高的是哈希表,刚好这道题只是两数之和,所以用哈希表刚刚好

 /*
        解题思路:1循环遍历一个数组,取到数组里面对应的x值
                2:以target-x作为key,到hash表里面去寻找
                    没有找到,将x作为key,它的索引作为value放入hash表
                    找到了,返回x和它配对数的索引即可
     */
    public static int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int x = nums[i];
            int y = target-nums[i];
            if(map.containsKey(y)){
               return new int[]{map.get(y),i};
            }else{
                map.put(x,i);
            }
        }
        return null;
    }

结果

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值