一、题目链接
https://leetcode.cn/problems/two-sum/
二、解题思路
三、实施步骤
四、Java程序
class Solution { // 第一种解决方案
/**
* 在给定数组中找出和为目标值的两个元素并返回它们的下标
*
* @param nums int类型的数组,代表给定数组
* @param target int类型的整数,代表目标值
* @return int类型的数组,存储nums中和为target的两个元素的下标
*/
public int[] twoSum(int[] nums, int target) {
int n = nums.length; // nums数组的长度
/* 遍历nums数组中除最后一个元素以外的其它元素 */
for (int i = 0; i < n - 1; i++) {
/* 遍历当前元素nums[i]之后的元素 */
for (int j = i + 1; j < n; j++) {
if (nums[i] + nums[j] == target) { // 如果找到和为target的两个元素
return new int[]{i, j}; // 返回它们的下标
}
}
}
return null; // 实际执行不到此处,仅为满足语法要求
}
}
import java.util.HashMap;
import java.util.Map;
class Solution { // 第二种解决方案
/**
* 在给定数组中找出和为目标值的两个元素并返回它们的下标
*
* @param nums int类型的数组,代表给定数组
* @param target int类型的整数,代表目标值
* @return int类型的数组,存储nums中和为target的两个元素的下标
*/
public int[] twoSum(int[] nums, int target) {
int n = nums.length; // nums数组的长度
// 利用Map的<key,value>结构,key存储元素,value存储下标,其中key具有唯一性
Map<Integer, Integer> map = new HashMap<>();
/* 遍历nums数组的元素 */
for (int i = 0; i < n; i++) {
if (map.containsKey(target - nums[i])) { // 如果map中存在key可与target匹配
return new int[]{map.get(target - nums[i]), i}; // 返回这两个元素的下标
}
map.put(nums[i], i); // 将当前元素nums[i]作为key、下标i作为value推入map中
/* 注:如果map中已有相同的key,则对应的value将被更新 */
}
return null; // 实际执行不到此处,仅为满足语法要求
}
}