#力扣#两数之和
给定一个整数数组 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]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum
1 import java.util.Arrays; 2 import java.util.HashMap; 3 import java.util.Map; 4 import java.util.Scanner; 5 6 public class TwoSum_1 { 7 public static void main(String[] args) { 8 Scanner scanner = new Scanner(System.in); 9 System.out.println("请输入一个数组,以空格隔开,以enter键结束:"); 10 int[] nums = {2, 7, 11, 15}; 11 int target = 9; 12 /*int[] nums = {3,2,4}; 13 int target = 6;*/ 14 int[] ints = twoSum(nums, target); 15 System.out.print("暴力破解:"); 16 System.out.println(Arrays.toString(ints)); 17 18 int[] ints2 = twoSum2(nums, target); 19 System.out.print("哈希表存储访问过的元素:"); 20 System.out.println(Arrays.toString(ints2)); 21 return; 22 } 23 24 //暴力破解 25 public static int[] twoSum(int[] nums, int target) { 26 for (int i = 0; i < nums.length; i++) { 27 for (int j = i + 1; j < nums.length; j++) { 28 if (nums[i] + nums[j] == target) { 29 return new int[]{i, j}; 30 } 31 } 32 } 33 return new int[0]; 34 } 35 36 //哈希表存储访问过的元素 37 public static int[] twoSum2(int[] nums, int target) { 38 Map<Integer, Integer> map = new HashMap<>();//元素值和元素位置的映射 39 for (int i = 0; i < nums.length; i++) { 40 if (map.containsKey(nums[i])) {//判断是否包含指定的键值 2,7 41 return new int[]{map.get(nums[i]), i};//map.get(nums[i] //获取指定键所映射的值 0 42 } else { 43 map.put(target - nums[i], i); //向集合中添加对象 (7,0), 44 } 45 System.out.println(map); 46 } 47 return null; 48 } 49 50 }
作者:冢本八云
个性签名:
如果你是鱼,不要迷恋天空。如果你是鸟,不要迷恋海洋。幸福便好,阳光聚散,不应多说。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!(っ•̀ω•́)っ✎⁾⁾