LeetCode【1】-Two Sum JAVA

题目

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

也就是一个数组以及一个值,返回数组中两个数相加等于指定值的两个索引

example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

方法1

暴力索引,时间复杂度为O(n^2)。

public class TwoSum {
/**
 * 时间复杂度为O(n^2)
 * @param nums
 * @param target
 * @return
 */
public static int []twoSum1(int []nums,int target){
    int index1,index2;
    int []index = new int[]{0,1};
    for(int i = 0;i<nums.length;i++){
        for(int j=i+1;j<nums.length;j++){
            if(target ==(nums[i]+nums[j])){
                index[0]=i;
                index[1]=j;
                return index;
            }
        }
    }
    return index;
}

方法2

使用HashMap来做,首先检验target-nums[i]能否加入到HashMap中,若能,则说明前面的数据没有与第i个字符的组合,当添加不成功,则说明存在符合的组合,记录索引,时间复杂度为O(n)。时间缩短很多

public static int []twoSum2(int []nums,int target){
    int []index = new int[]{0,1};
    HashMap<Integer, Integer> hm = new HashMap<>();

    for(int i=0;i<nums.length;i++){
        if(hm.containsKey(target-nums[i])){
            index[1] = i;
            index[0] = hm.get(target-nums[i]);
            return index;
        }else {
            hm.put(nums[i], i);
        }
    }
    return index;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值