1. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode)
package com.example.study; import java.util.Arrays; import java.util.Random; import java.util.Scanner; /** *author:bingbing *日期:2020年7月3日 *时间:下午9:11:14 * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */ public class Demo01 { public static void main(String[] args) { int [] nums=new int[] {2,7,11,15}; //数组中不同的2数和为目标值 int target; System.out.println(Arrays.toString(nums)); System.out.println("请输入目标值target:"); Scanner scanner=new Scanner(System.in); target=scanner.nextInt(); scanner.close(); int i = 0,j = 0; countTarget(nums,target,i,j); } private static void countTarget(int[] nums, int target,int i,int j) { for(int k=0;k<nums.length;k++) { for(int g=k+1;g<nums.length;g++) { if(nums[k]+nums[g]==target) { i=k; j=g; break; } } } System.out.println("["+i+","+j+"]"); } }
方法二:使用hashmap
使用hashp记录每次 当前数组里的值,如果说target-nums[i]在map里,那么就表示找到指定的下标位置, 每次讲nums[i]作为key, i作为value,最后直接返回i,和map.get(count)作为最后的下标值:
package com.example.file; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Demo05_01 { public static void main(String[] args) { int [] nums=new int[] {2,7,11,15}; //数组中不同的2数和为目标值的下标给打印出来 int target; System.out.println(Arrays.toString(nums)); System.out.println("请输入目标值target:"); Scanner scanner=new Scanner(System.in); target=scanner.nextInt(); scanner.close(); System.out.println(Arrays.toString(countTarget(nums,target))); } private static int[] countTarget(int[] nums, int target) { // hashmap Map<Integer,Integer> mymap=new HashMap<>(); for(int i=0;i<nums.length;i++){ int count=target-nums[i]; //比较key if (mymap.containsKey(count)) { return new int[]{mymap.get(count),i}; } mymap.put(nums[i], i); } throw new RuntimeException("没有找到满足的下标位置!"); } }
打印结果: [2, 7, 11, 15] 请输入目标值target: 22 [1, 3]