【LeetCode】1. 两数之和 【java - 哈希表】

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] +nums[1] == 9 ,返回 [0, 1] 。

示例 2:
输入:nums = [3,2,4],
target = 6 输出:[1,2]

示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]

方法:定义一个哈希表,①遍历数组并将值和目标数的差值存进哈希表中的key中,对应value为 值的位置;②对值进行判断,是否存在于哈希表中,如果存在,取出哈希表中对应值的value。

执行用时:1 ms, 在所有 Java 提交中击败了99.45%的用户

java代码:

	public static void main(String[] args) {
		int []arr = new int[] {2,7,11,15}; 
		int []arr1 = new int[] {3,2,4};
		int []arr2 = new int[] {3,3};
		
		twoSum(arr, 9);
		twoSum(arr1, 6);
		twoSum(arr2, 6);
	}
	
	
	/**
	 * 
	 *  给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

		你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
		
		你可以按任意顺序返回答案。
	 */
	//哈希表的使用
    public static int[] twoSum(int[] nums, int target) {
    	//定义结果数组
    	int []res = new int[2];
    	//定义哈希表
    	HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
    	
    	for(int i = 0; i < nums.length ; i++) {
    		//如果哈希表中存在一个值 key = target - nums[i]
    		if(hash.containsKey(nums[i])){
    			res[0] = i;
    			res[1] = hash.get(nums[i]);
    			//测试
//    			System.out.print(i + "===");
//    			System.out.print(hash.get(nums[i]));
//    			System.out.print("\n");
    			return res;
    		}
    		//①遍历数组并将值和目标数的差值存进哈希表中的key中,对应value为值的位置
    		hash.put(target - nums[i], i);
    	}
    	
    	return res;
    }

做完了这个题主要是对哈希表的使用加深了印象。☺☺☺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值