public class Solution {
public static void main(String[] args) {
int[] ints = twoS(new int[]{0,4,1,0}, 0);
System.out.println(Arrays.toString(ints));
}
// 方法 1
public static int[] twoSum (int[] numbers, int target) {
int[] oldNum = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
oldNum[i] = numbers[i];
}
Arrays.sort(numbers);
int[] twoSum = new int[2];
int begin = 0;
int len = numbers.length -1;
int left = numbers[begin];
int right = numbers[len];
int sum = left + right;
boolean isLeft = true;
boolean isRight = true;
for (int i = 0; i < numbers.length; i++) {
if (sum == target) {
for (int i1 = 0; i1 < oldNum.length; i1++) {
if (oldNum[i1] == left && isLeft){
twoSum[0] = i1 + 1;
isLeft = false;
}else if (oldNum[i1] == right && isRight){
twoSum[1] = i1 + 1;
isRight = false;
}
}
Arrays.sort(twoSum);
}else if (sum > target){
len--;
right = numbers[len];
}else {
begin ++;
left = numbers[begin];
}
sum = left + right;
}
return twoSum;
}
//方法 2
public static int[] twoS(int[] numbers, int target) {
int n = numbers.length;
int[] result = new int[2];
//map里面放 键为target-每个数的结果 值为下标
//每次放入的时候看是否包含 当前值
//有的话说明当前值和已包含的值下标的那个元素为需要的结果
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<n;i++){
if(map.containsKey(numbers[i])){
result[0] = map.get(numbers[i])+1;
result[1] = i+1;
break;
}
else{
map.put(target - numbers[i], i);
}
}
return result;
}
}
求一个数组中和为目标数target的两个元素的下标,下标从1开始
最新推荐文章于 2022-06-10 09:25:46 发布