leetcode_easy_1_实现两数之和_java

该博客介绍了如何解决LeetCode上的第1题——找到数组中和为目标值的两个数。提供了两种解法,包括暴力遍历和使用HashMap降低时间复杂度至O(1)的方法。通过将元素值作为HashMap的key,下标作为value,可以在遍历过程中快速找到匹配的数对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
解法1:暴力方法。遍历每个元素i,查找是否存在一个值与target-i相等,若存在则返回下标。
package easy;

import java.util.Arrays;

public class TwoSum {
    public static int[] twosum(int[] sums, int target){
        for(int i=0;i<sums.length-1;i++){
            for(int j=i+1;j<sums.length;j++){
                if(sums[i]+sums[j]==target){
                    return new int[] {i,j};
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
    public static void main(String[] args){
        int[] t_sum = {1,2,3,4,5,6,7,8,9};
        int target = 9;
        int[] result = new int[2];
        result = twosum(t_sum,target);
        System.out.println(Arrays.toString(result));

    }
}

"C:\Program Files\Java\jdk-14.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\lib\idea_rt.jar=13326:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Jinfanglin\IdeaProjects\leetCode\out\production\leetCode easy.TwoSum
[0, 7]

Process finished with exit code 0
解法2:解法1通过暴力的方式求解,时间复杂度为O(n**2)。考虑到hashmap查找的时间复杂度为O(1)。我们可以将数组中元素值作为key,下标作为value。遍历数组nums的时候,判断map中是否存在targert-nums[i]的key值。如果存在则说明找到了,如果不存在则将该值加入到map,继续向下遍历,直到找到或者结束为止。如果最终都没有找到则跑出异常。
package easy;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class TwoSum_method2 {
    public static int[] twosum(int[] nums,int target){
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(target-nums[i])){
                return new int[]{i,map.get(target-nums[i])};
            }
            map.put(nums[i],i);
        }
        throw new IllegalArgumentException("No tow sum solution");
    }
    public static void main(String[] args){
        int[] nums = {1,2,3,4,5,6,7,8,9};
        int target = 9;
        int[] result = twosum(nums,target);
        System.out.println(Arrays.toString(result));
    }

}

"C:\Program Files\Java\jdk-14.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\lib\idea_rt.jar=4423:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Jinfanglin\IdeaProjects\leetCode\out\production\leetCode easy.TwoSum_method2
[4, 3]

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值