基础算法01----------求和项
package suanfa; import java.util.HashMap; import java.util.Map; public class theday1 { /*给定一个数组和一个目标和,从数组中找到两个数字相加等于目标和,输出这两个数字的下标 Given nums=[2,7,11,15],target=9; because nums[0]+nums[1]=2+79; return[0,1]. */ private static int[] seed1(int[] nums,int target){ int[] result=new int[2]; for (int i = 0; i < nums.length; i++) { for(int j=nums.length-1;j>i;j--){ if (nums[i]+nums[j]==target){ result[0]=i; result[1]=j; } } } return result; } private static int[] seed2(int[] nums,int target){ // Hashmap集合算法 通过键(数组值)找值(数组下标) Map<Integer,Integer> map= new HashMap<>(); int[] arr =new int[2]; for (int i = 0; i < nums.length; i++) { map.put(nums[i],i); } for (int i = 0; i < nums.length; i++) { int value=target-nums[i]; if(map.containsKey(value)&&map.get(value)!=i){ arr[0]=i; arr[1]=map.get(value); return arr; } } return arr; } private static int[] seed3(int[] nums,int target){ // 解法2进阶版 思路跃进 循环先进行后填充map Map<Integer,Integer> map=new HashMap<>(); int[] result =new int[2]; for (int i = 0; i < nums.length; i++) { int value=target-nums[i]; if(map.containsKey(value)){ result[0]=i; result[1]=map.get(value); return result; } map.put(nums[i],i); } throw new IllegalMonitorStateException("there any two sum solution"); } public static void init(){ int[] nums={2,7,11,15}; int target=30; int[] ints = seed3(nums, target); for (int i = 0; i < ints.length; i++) { System.out.println(ints[i]); } } public static void main(String[] args) { theday1.init(); } }