import java.util.*;
public class twoSum {
static int a[] = { 1, 2, 3, 4, 5, 6 };
private static int[] twoSum(int[] arr, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
map.put(arr[i], i);
}
for (int i = 0; i < arr.length; i++) {
int complement = target - arr[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { map.get(complement), i };
}
}
return null;
}
private static int[] twoSumPlus(int[] arr, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
if(arr[i]<= target){
map.put(arr[i], i);
}
}
for (int i = 0; i < arr.length; i++) {
int complement = target - arr[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { map.get(complement), i };
}
}
return null;
}
private static int[] twoSumPlus1(int[] arr, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
if(arr[i]<= target){
map.put(arr[i], i);
}
// 添加的同时不断去里面查找,前面添加邵的时候或许不存在,后面添加的多了,就存在了。然后返回了。
int complement = target - arr[i];
if (map.containsKey(complement) && map.get(complement) != i) {
System.out.println("<<<<<<<<可行方法<<<<<<<<");
return new int[] { map.get(complement), i };
}
}
return null;
}
public static void main(String[] args) {
twoSum ts = new twoSum();
// int b[] = ts.twoSum(a,4);
// int b[] = ts.twoSumPlus(a,4);
int b[] = ts.twoSumPlus1(a,4);
System.out.println(Arrays.toString(b));
// List<int[]> c = ts.twoSumPlus(a,5);
System.out.println("<<<<<<<<c.size<<<<<<<<");
// System.out.println(c);
// System.out.println(c.size());
System.out.println("<<<<<<<<plus<<<<<<<<");
System.out.println("<<<<<<<<plus<<<<<<<<");
}
}
查找数组中两个数相加等于目标值,有且只有一组解
最新推荐文章于 2023-06-26 17:53:07 发布