Java基础暑假每日一练
两数之和
题目:给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。假设每种输入只会对应一个答案,且数组中同一个元素不能使用两遍。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解题思路:
- 暴力解法(两层循环)时间复杂度较高,可使用
HashMap
优化:遍历数组时,用target - 当前元素
作为 key 查找 map,若存在则返回下标,否则将当前元素和下标存入 map。
import java.util.HashMap;
import java.util.Map;public class TwoSum {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];if (map.containsKey(complement)) {return new int[]{map.get(complement), i};}map.put(nums[i], i);}throw new IllegalArgumentException("No solution");}public static void main(String[] args) {TwoSum solution = new TwoSum();int[] result = solution.twoSum(new int[]{2, 7, 11, 15}, 9);System.out.println(result[0] + " " + result[1]); // 输出:0 1}
}