给定一个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;
}
}
class FindPair { public: int countPairs(vector<int> A, int n, int sum) { int size = A.size(); if(size == 0 || n <= 0){ return 0; }//if // 排序 sort(A.begin(),A.end()); // int count = 0; for(int i = 0,j = n - 1;i < j;){ int s = A[i] + A[j]; if(s == sum){ // 3 3 3这种情况 if(A[i] == A[j]){ int x = j-i+1; count += x*(x-1)/2; break; }//if // 2 2 3 4 4 4这种情况 else{ int k = i+1; while(k <= j && A[i] == A[k]){ ++k; }//while int k2 = j-1; while(k2 >= i && A[j] == A[k2]){ --k2; }//while count += (k-i)*(j-k2); i = k; j = k2; }//else }//if else if(s < sum){ ++i; }//else else{ --j; }//else }//for return count; } };