У меня только что было онлайн-интервью по кодированию, и один из вопросов, заданных для данного массива целых чисел, узнать количество пар, суммирование которых равно определенному числу (переданному как параметр внутри метода). Например, массив задается как,Число пар из массива, сумма которого равна заданному числу?
int[] a = {3, 2, 1, 45, 27, 6, 78, 9, 0};
int k = 9; // given number
Таким образом, будет 2 пары (3, 6) и (9, 0), сумма которых равна 9. Это хорошо, чтобы отметить, что, как образуются пары не имеет значения. Средство (3,6) и (6,3) будет рассматриваться как одна и та же пара. Я представил следующее решение (на Java) и любопытно узнать, не пропустил ли я какие-либо проблемы с краем?
public static int numberOfPairs(int[] a, int k){
int len = a.length;
if (len == 0){
return -1;
}
Arrays.sort(a);
int count = 0, left = 0, right = len -1;
while(left < right){
if (a[left] + a[right] == k ){
count++;
if (a[left] == a[left+1] && left < len-1){
left++;
}
if (a[right] == a[right-1] && right >1){
right-- ;
}
right--; // right-- or left++, otherwise, will get struck in the while loop
}
else if (a[left] + a[right] < k){
left++;
}
else {
right--;
}
}
return count;
}
Кроме того, может ли кто-нибудь предложить альтернативное решение проблемы? Благодарю.
Повторяющиеся элементы могут быть проблемой, например. {3, 3, 2,1,45, 27, 6, 78, 9, 0} – ligi
Я подумал об этом и предоставил 2 условия, если k совпадает с парой. if (a [left] == a [left + 1] && left 1) { right--; } Но, вы мне подумали, возможно, что более двух чисел дублируются, скажем, int [] a = {3, 3, 2,2,2,2, 1,45, 27, 6, 78, 9, 0}, здесь у меня есть четверо 2-х. Может быть, я должен использовать, пока это примерно так: while (a [left] == a [left + 1] && left
Возможный дубликат [Найти пару элементов из массива, чья сумма равна заданному числу] (https://stackoverflow.com/questions/4720271/find-a-pair -of-elements-from-a-array-which-sum-equals-a-given-number) – user2314737