两个数字之和

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解题思路:
这道题如果采用暴力的方法来解决的话,就是通过两个for循环来遍历给定的数组。这样的做比较费时。比较好的方式是采用HashMap的方式来解决该问题。通过HashMap来存储数组中的数组和对应的下标。最后通过两次调用HashMap即可获得两个元素的下标。

import java.util.HashMap;

/*
 * @author: mario
 * @date: 2019/1/4
 * 两个数之和
 * **/
public class Problem01 {
    public int[] twoSum(int[] nums, int target){
        if(nums.length == 0){
            return nums;
        }
        int[] result = new int[2];
        HashMap<Integer, Integer> hash = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
                hash.put(nums[i], i);
        }
        for(int i = 0; i < nums.length; i++){
            int temp = target - nums[i];
            if(hash.containsKey(temp) && hash.get(temp) != i){
                result[0] = i;
                result[1] = hash.get(temp);
            }
        }
        
        return result;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] nums = {2,7,11,15};
        Problem01 pb = new Problem01();
        int[] result = new int[2];
        result = pb.twoSum(nums, 9);
        System.out.println("result:"+result[0]);
        System.out.println("result:"+result[1]);
    }

}

leetcode题目地址: https://leetcode-cn.com/problems/two-sum/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 8,907评论 0 0
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 7,118评论 0 1
  • 排序算法几种分类方式: 1,稳定排序和不稳定排序 如果a==b, 当排序之前a在b的前面,排序后,a仍然在b...
    fly_ever阅读 3,177评论 0 0
  • 伙伴们晚上好,通过三天的会议学习,自己感触很多,通过俩个小故事,(一杯浊酒和拔河时少了一个人的力量) 第一个小故事...
    何晓雪阅读 1,040评论 0 0
  • gateway机器是跳板机,提交job到云梯的,在gateway机器上只要配置hadoop-site.xml即可,...
    Yobhel阅读 4,312评论 0 2