两数之和算法java实现

题目描述

给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解

例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2

示例1
输入:
[3,2,4],6
返回值:[2,3]
说明:
因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以输出[2,3]

解题思路

求数组中两个数字之和等于一个固定值,也就是类似于x+y=90,要从数组中找到x和y,
//假定我们先找x,那y是不是就能通过90-x来知道要找什么值,但我们在找的过程中只能
//从遍历一遍开始找,每过一个数字都要找剩下的数字有没有符合90-y的,但实际上不需要找剩下
//的数字,因为我们在遍历找x的时候,可以把当前的值存起来给后面遍历到的位置时判断90-y
//在不在用,假设值在最后一位才找到,那么最多就是遍历完整个序列就能找到了,此外因为题目
//要求输出从1开始算起的序号,因此我们在存值的时候需要把映射也存了,这就是为什么不用list
//而用hashmap数据结构的原因

package middle;

import java.util.*;

public class TwoSum {

    /**
     *
     *    //求数组中两个数字之和等于一个固定值,也就是类似于x+y=90,要从数组中找到x和y,
     *    //假定我们先找x,那y是不是就能通过90-x来知道要找什么值,但我们在找的过程中只能
     *    //从遍历一遍开始找,每过一个数字都要找剩下的数字有没有符合90-y的,但实际上不需要找剩下
     *    //的数字,因为我们在遍历找x的时候,可以把当前的值存起来给后面遍历到的位置时判断90-y
     *    //在不在用,假设值在最后一位才找到,那么最多就是遍历完整个序列就能找到了,此外因为题目
     *    //要求输出从1开始算起的序号,因此我们在存值的时候需要把映射也存了,这就是为什么不用list
     *    //而用hashmap数据结构的原因
     * @param numbers int整型一维数组
     * @param target int整型
     * @return int整型一维数组
     */
    public int[] twoSum (int[] numbers, int target) {

        Map<Integer,Integer> map=new HashMap();
        for(int i=0;i<numbers.length;i++){
            if(map.containsKey(target-numbers[i])){
                return new int[]{map.get(target-numbers[i])+1,i+1};
            }else{
                map.put(numbers[i],i);
            }
        }

        return new int[]{};
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值