Контрольный пример граничного условия не пройден - Непрерывная сумма subArray - PullRequest
0 голосов
/ 09 февраля 2019

Проблема: Учитывая список неотрицательных чисел и целое целое число k, напишите функцию, чтобы проверить, имеет ли массив непрерывный подмассив размером не менее 2, который суммирует с кратным k, то есть суммируетв n * k, где n также является целым числом.

Пример 1:

Вход: [23, 2, 4, 6, 7], k = 6 Выход: True

Объяснение: Поскольку [2, 4] является непрерывным подрешеткой размера 2 и суммирует до 6.

Пример 2:

Ввод: [23, 2, 6, 4, 7], k = 6 Вывод: True

Объяснение: Поскольку [23, 2, 6, 4, 7] является непрерывным подрешеткой размера 5 и имеет сумму до 42.

Mycode:

class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
    int curSum=nums[0];
    int start=0;
    int k1=Math.abs(k);

    for(int i=1;i<nums.length;i++){

        while (curSum>k1 && start<i-1){
            curSum = curSum - nums[start];
            start++;
        }
       if(k1>0 && (curSum%k1)==0){
            return true;
        }
        if(curSum==0 && k1==0){
            return true;
        }


        curSum=curSum+nums[i];


    }

    return false;

}

}

Мое решение не может передать этот вход теста = {0,1,0} k = 0.Мой вывод верный.Ожидаемый результат: Ложь.Как я могу ввести это граничное условие согласно моему коду?

Я следую этому .Но нет ничего, что обсуждает этот тестовый пример.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Совершенно очевидно, что тестовый случай input={0,1,0} k=0 является ложным, поскольку любой подмассив размером 2 или больше всегда будет иметь sum = 1, а 1 никогда не будет равен нулю или любому множителю, равному нулю.

Простое решение состоит в том, чтобы просто полностью удалить

if(curSum==0 && k1==0){
    return true;
}

, поскольку тогда метод вернет false для обсуждаемого тестового примера, но при этом появятся другие неудачные тесты.То, что вы хотите проверить, когда k = 0 - вхождение двух нулей подряд.Примерно так:

if (curSum==0 && k1==0 && (i + 1) < nums.length && nums[i] == 0 && nums[i+1] == 0) {
        return true;
}

Теперь я только быстро проверил это, поэтому, возможно, его нужно улучшить, но, по крайней мере, он показывает, что нужно проверять.

0 голосов
/ 09 февраля 2019

Проблема, как представляется, заключается в следующем, если условие в вашем коде

        if(curSum==0 && k1==0){
            return true;
        }

В самой первой итерации это условие выполняется и возвращает true. Вам необходимо исправить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...