给定一个int数组A及其大小n以及需查找的和sum,请返回数组中两数之和为sum的整数对的个数。保证数组大小小于等于3000。
测试样例:
[1,2,3,4,5],5,6
返回:2
import java.util.*; public class FindPair { public int countPairs(int[] A, int n, int sum) { // write code here Map<Integer, Integer> map=new HashMap<Integer, Integer>(); Arrays.sort(A); int count=0; for(int i=0; i<n; i++){ count+=map.getOrDefault(sum-A[i], 0); map.put(A[i], map.getOrDefault(A[i], 0)+1); } return count; } }
import java.util.*; public class FindPair { public int countPairs(int[] A, int n, int sum) { // write code here HashMap<Integer,Integer> map=new HashMap<>(); Set<Integer> set=new HashSet<>(); for(int i=0;i<n;i++){ map.put(A[i],map.getOrDefault(A[i],0)+1); set.add(A[i]); } int count=0; Iterator<Integer> iterator=set.iterator(); while(iterator.hasNext()){ int key=iterator.next(); int num1=map.getOrDefault(key,0); int num2=map.getOrDefault(sum-key,0); if(num1>0 && num2>0) count+=(key==sum-key)? (num1/2>0?(num1-1)*num1/2:0):num1*num2; if(num1!=0) map.remove(key); if(num2!=0) map.remove(sum-key); } return count; } }
要保证数组下标i、j不相等哦
import java.util.*;
public class FindPair {
public int countPairs(int[] a, int n, int sum) {
// write code here
int count = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
int temp = a[i] + a[j];
if (i != j) {
if (temp == sum) {
count++;
}
}
}
}
return count;
}
}
import java.util.*; public class FindPair { public int countPairs(int[] A, int n, int sum) { HashMap<Integer,Integer> map=new HashMap<>(); int count=0; for(int temp:A){ count+=map.getOrDefault(sum-temp,0); map.put(temp,map.getOrDefault(temp,0)+1); } return count; } }
import java.util.*; public class FindPair { public int countPairs(int[] A, int n, int sum) { HashMap<Integer,Integer> map=new HashMap<Integer,Integer>(); int res=0; for(int i=0;i<n;i++){ if(map.containsKey(sum-A[i])) res+=map.get(sum-A[i]); if(map.containsKey(A[i])) map.put(A[i],map.get(A[i])+1); else map.put(A[i],1); } return res; } }
public int countPairs(int[] A, int n, int sum) { HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(n); int count = 0; for (int i = 0; i < n; i++) { if(map.containsKey(sum-A[i])){ count +=map.get(sum-A[i]); } if(map.containsKey(A[i])){ map.put(A[i], map.get(A[i])+1); }else { map.put(A[i], 1); } } return count; }
import java.util.*; public class FindPair { public int countPairs(int[] A, int n, int sum) { HashMap<Integer, Integer> hashMap = new HashMap<>(); int count = 0; for (int i=0; i<n; i++) { count += getCount(hashMap, sum - A[i]); hashMap.put(A[i], getCount(hashMap, A[i]) + 1); } return count; } private Integer getCount(HashMap<Integer, Integer> hashMap, Integer word){ Integer get = hashMap.get(word); return get == null ? 0 : get; } }