Я видел, что этот вопрос задал много. Я получаю, как это работает: мы проверяем сумму первого и последнего. Если эта сумма больше k, то последняя - или если ее меньше k, то сначала ++. Это происходит рекурсивно до тех пор, пока не будет найден первый или последний или сумма k не будет найдена. ** Обратите внимание, что значения в массиве всегда сортируются в порядке возрастания.Рекурсия: Определите, есть ли два элемента в массиве A, сумма которых равна k
Я пытался использовать рекурсию, но всякий раз, когда я запускаю ее, она всегда возвращает «false». Я пробовал массивы всех размеров, и все тестовые примеры возвращают false. например Массив [1 2 3 4 5 6], размер n = 6 и k = 7 возвращает false, когда оно должно быть истинным. Я не могу найти ошибку. Может кто-нибудь, пожалуйста, дать мне указание, где я делаю свою ошибку? И если я не ошибаюсь, это работает в O (n) времени?
public static boolean sum(int[] A, int n, int k) //where k is the sum needed and n the size of the array
{
if (k <= A[0] || k >= A[n]*2)
{
return false;
}
int i = 0;
int j = n-1;
return sum_Recursion(A, n, k, i, j);
}
private static boolean sum_Recursion(int[] A, int n, int k, int i, int j)
{
if(i == j)
{
return false;
} else if((A[i] + A[j]) == k)
{
return true;
} else if ((A[i] + A[j]) > k)
{
return sum_Recursion(A, n, k, i, j--);
}
return sum_Recursion(A, n, k, i++, j);
}
Это должно быть O (n), каков минимальный вход, который показывает проблему? Что вы видите, когда пытаетесь отлаживать свой код в своем отладчике? Примечание: 'sum_recursion' не использует' n'. Почему 'j = n - 1'? Что делать, если последнее значение необходимо? –
@PeterLawrey С любыми вводами, то есть я даю ему массив, а затем проверяю его на значения k, которые являются суммой двух целых чисел в этом массиве, а также других k ... во всех случаях он возвращает false. Это никогда не бывает так. n - размер массива (он задается как параметр, поэтому я делаю j = n - 1 для последнего индекса. – RYS221
Если 'n' - это размер массива' A [n] 'всегда будет вызывать исключение Я предлагаю вам использовать 'A.length' как размер массива. –