计算两个数字之和
public class GetNum {
public static void main(String[] args) {
int[] nums = {4, 7, 7, 11, 15, 10, 7};
int target = 14;
List<int[]> result = twosum_input_contain_duplication(nums, target);
result.forEach(item -> {
System.out.println(Arrays.toString(item));
});
}
private static int[] TwoNum(int[] nums, int target) {
int length = nums.length;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < length; i++) {
if (map.containsKey(target - nums[i])) {
return new int[]{map.get(target - nums[i]), i};
} else {
map.put(nums[i], i);
}
}
return new int[0];
}
private static List<int[]> getTwoNum(int[] nums, int target) {
List<int[]> lists = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
lists.add(new int[]{map.get(target - nums[i]), i});
}
map.put(nums[i], i);
}
return lists;
}
public static List<int[]> twosum_input_contain_duplication(int[] nums, int target) {
ArrayList<int[]> arrayList = new ArrayList<>();
int pOld = 0;
int pBegin = 0;
int pEnd = nums.length - 1;
while (pBegin < pEnd) {
pOld = pEnd;
while (pBegin < pEnd) {
if (nums[pBegin] + nums[pEnd] == target) {
int[] res = new int[2];
res[0] = pBegin;
res[1] = pEnd;
arrayList.add(res);
}
pEnd--;
}
pEnd = pOld;
pBegin++;
}
return arrayList;
}
}