原文:
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:
代码语言:javascript复制Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] nums[1] = 2 7 = 9,
return [0, 1].
解题:
代码语言:javascript复制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);
}
}