给定一个整形数组和一个整数target,返回2个元素的下标,它们满足相加的和为target。
你可以假定每个输入,都会恰好有一个满足条件的返回结果。
(时间复杂度O(n)):
public static void main(String[] args){ int[] main = {1,2,5,6,8,7}; System.out.println("11111111111111+22222222222"); System.out.println(Arrays.toString(twoSum(main,9))); Iterator iter = twoSums(main,9).entrySet().iterator();//遍历hashmap while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println(key + ":" + Arrays.toString((int[]) value)); } } public static int[] twoSum(int[] nums, int target) { //数组中两个元素和为特定值有且只有一组 Map<Integer,Integer> map=new HashMap<>(); for(int i=0;i<nums.length;i++){ Integer index=map.get(target-nums[i]); if(index==null){ map.put(nums[i],i); }else{ return new int[]{i,index}; } } return new int[]{0,0}; } public static HashMap twoSums(int[] nums, int target) { //数组中两个元素和为特定值有且有多组 Map<Integer,Integer> map=new HashMap<>(); HashMap<Integer,int[]> maps=new HashMap<>(); for(int i=0;i<nums.length;i++){ Integer index=map.get(target-nums[i]); if(index==null){ map.put(nums[i],i); }else{ maps.put(i,new int[]{i,index}); } } return maps; }