原文:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
解题:
package leetcode; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Stack; public class Demo1 { //暴力解题 public static int[] twoSum(int[] nums, int target) { Stack<Integer> stack = new Stack<Integer>(); for(int i=0; i<nums.length; i++) { int tmp = nums[i]; stack.add(tmp); } while(stack.iterator().hasNext()) { int i=0; int[] temp = new int[2]; Integer peek = stack.peek(); for(int j=i+1;j<nums.length;j++) { int peek2 = nums[j]; int vv = peek2 + peek; if(vv == target) { temp[0] = peek; temp[1] = peek2; System.out.println("输出数组:temp = ["+i+","+j+"]"); } } i++; stack.pop(); } return new int[] {}; } //暴力解题 public static void twoSum1(int[] nums, int target) { for(int i = 0;i<nums.length;i++) { int[] temp = new int[2]; Integer peek = nums[i]; for(int j=i+1;j<nums.length;j++) { int vv = nums[j] + peek; if(vv == target) { temp[0] = peek; temp[1] = nums[j]; System.out.println("输出数组:temp = ["+i+","+j+"]"); } } } } //参考大佬的方法 public static void twoSum3(int[] nums, int target) { int[] temp = new int[2]; Map<Integer,Integer> map = new HashMap(); for(int i= 0; i<nums.length; i++) { if(map.containsKey(nums[i])) { temp[0] = map.get(nums[i]); temp[1] = i; }else { map.put(target - nums[i], i); } } System.out.println("输出数组:temp = ["+temp[0]+","+temp[1]+"]"); } public static void twoSum4(int[] nums, int target) { int[] result = new int[2]; int[] copyNums = new int[nums.length]; System.arraycopy(nums, 0, copyNums, 0, nums.length); Arrays.sort(nums); int sIndex = 0; int eIndex = nums.length - 1; for (int i = 0; i < nums.length; i++) { if (nums[sIndex] + nums[eIndex] == target) { result[0] = nums[sIndex]; result[1] = nums[eIndex]; break; } else if (nums[sIndex] + nums[eIndex] > target) { eIndex--; } else { sIndex++; } } boolean fGit = false; for (int i = 0; i < copyNums.length; i++) { if (!fGit && copyNums[i] == result[0]) { sIndex = i; fGit = true; } else if (copyNums[i] == result[1]) { eIndex = i; } } if (sIndex > eIndex) { result[0] = eIndex; result[1] = sIndex; } else { result[0] = sIndex; result[1] = eIndex; } System.out.println("输出数 组:temp = ["+result[0]+","+result[1]+"]"); } public static void main(String[] args) { int[] a = {2, 7, 11, 15}; twoSum(a,9); } }
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句