Given an array of integers, find the numbers such that they add up to a specific target number.
The function twosum should return indices of the numbers such that they add up to the target, where index1 must is Les S than Index2. Please note that your returned answers (both Index1 and INDEX2) is not zero-based.
You may assume this each input would has exactly one solution.
Input:numbers={2, 7, one, A, target=9
Output:index1=1, index2=2
Sort first, then scan from both ends to the middle, time complexity O (n + nlgn);
public class Solution {
Private class Tuple {
int Val;
int index;
public Tuple (int v, int idx) {
val = v;
index = IDX;
};
}
Public int[] Twosum (int[] numbers, int target) {
tuple[] tuples = new Tuple[numbers.length];
for (int i = 0; i < numbers.length; i++) {
Tuples[i] = new Tuple (Numbers[i], i + 1);
}
Arrays.sort (tuples, new comparator<tuple> () {
@Override
public int compare (tuple t1, tuple T2) {
if (T1.val < T2.val) {
return-1;
} else if (T1.val > T2.val) {
return 1;
}
return 0;
}
});
for (int i = 0, j = tuples.length-1; I <= J;) {
int sum = Tuples[i].val + tuples[j].val;
if (sum = = target) {
if (Tuples[i].index > Tuples[j].index) {
return new Int[]{tuples[j].index, tuples[i].index};
}
return new Int[]{tuples[i].index, tuples[j].index};
} else if (sum < target) {
i++;
} else {
j--;
}
}
Return new Int[]{-1,-1};
}
}
1. The Sum of the