leetcode-1 两数之和

坚持打卡!


题目:

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


主要思路:

1,设计一个容器存放该数组元素

2,对目标和进行减操作,查看容器中是否存在相差的值的元素

3,记录下标并返回结果

4,若不存在则提示异常错误


参考代码

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

/**
 *
 * @author SanYi
 * @version 1、两数之和
 *
 */
public class Test1 {

	public static void main(String[] args) {
		// 目标数组
		int[] current = { 2, 7, 23, 13 };
		// 目标和
		int target = 30;
		// 调用方法
		int[] result = FindTwoSum(current, target);

		System.out.println("[" + result[0] + "," + result[1] + "]");
	}

	/**
	 * @author SanYi
	 * 
	 * @param nums
	 *            目标数组
	 * @param target
	 *            目标和
	 * @return int[] 返回结果这个两个加数的数组下标
	 * 
	 * */
	public static int[] FindTwoSum(int[] nums, int target) {
		// 存放数组数据
		Map map = new HashMap<>();
		// 判断是否包含
		for (int i = 0; i < nums.length; i++) {
			// 获取相差的值
			int tmp = target - nums[i];
			// 判断是否包含相差的值
			if (map.containsKey(tmp)) {
				// 存在即返回
				return new int[] { map.get(tmp), i };
			}
			// 不存在,则加入
			map.put(nums[i], i);
		}
		// 找不到抛出异常
		throw new IllegalArgumentException("找不到相加之和为" + target + "的整数");
	}
}

总结:

这道题还是比较简单的。主要就是查找相差的值和过程数据的存储。

你可能感兴趣的:(LeetCode,java,两数之和)