Приведенное ниже решение проблемы с кодом работает для меня в локальной среде IDE, но каким-то образом не работает в среде Hackerrank, есть ли у моего кода какие-либо проблемы - PullRequest
0 голосов
/ 20 июня 2020

Минимальное начальное значение

Начните с заданного массива целых чисел и произвольного начального значения x. Вычислите текущую сумму x плюс каждый элемент массива слева направо. Текущая сумма никогда не должна быть ниже 1. Определите минимальное значение x.

Пример arr = [4, -2,3,1, -5] Первый элемент - это размер, поэтому массив вам нужно работать с arr = [- 2,3,1, -5] с размером n = 4

, если x = 4, будет получен следующий результат.

sum     arr[i]
-----   ------ 
4        -2
2         3
5         1
6        -5
1

Таким образом, минимальное значение равно 4.

Аналогично, для массива arr = [10, -5, 4, -2, 3, 1, -1, -6, -1, 0, - 5], размер будет равен 10, поэтому фактический массив имеет вид arr = [- 5, 4, -2, 3, 1, -1, -6, -1, 0, -5].

if x=6, following result would be obtained.

 sum     arr[i]
        -----   ------
        6       -5
        1        4
        5       -2
        3        3
        6        1
        7       -1
        0       -6
                -1
                 0
                -5

Итак, во время подсчета суммы мы получили сумму 0, которая меньше 1, поэтому x = 6 не является минимальным значением.

если x = 11, будет получен следующий результат.

   sum     arr[i]
    -----   ------
    11       -5
    6         4
    10       -2
    8         3
    11        1
    12       -1
    11       -6
    5        -1
    4         0
    4        -5
   -1  

Это неверно, и мы получили число меньше 1, поэтому это не минимальное значение.

если x = 13, будет получен следующий результат.

    sum     arr[i]
    -----   ------
    13       -5
    8         4
    12       -2
    10        3
    13        1
    14       -1
    13       -6
    7        -1
    6         0
    6        -5
    1

Итак, минимальное значение будет 13

Ниже приведен код, который я написал для указанной выше проблемы. В тесте 5 тестовых случаев, все они были успешными. l в моей локальной среде IDE, но все не удалось в среде hackerrank.

public static int minX(List<Integer> arr) {
        int x=0;
        arr.remove(0);
        boolean limitFound = false;
        while(!limitFound){
            int sum=x;
            for(Integer i: arr){
                sum+=i;
                if(sum<1){
                    break;
                }
            }
            limitFound = sum<1?false:true;
            if(limitFound){
                break;
            }
            x++;
        }
        return x;
        }

Я действительно не могу найти ничего плохого в своем решении. Кроме того, пожалуйста, помогите мне понять, почему это не удалось там и когда Я пробую то же самое в своей локальной среде IDE, он прошел все тот же тестовый сценарий ios. Кроме того, будет полезно, как улучшить код.

Ответы [ 4 ]

0 голосов
/ 29 августа 2020
#include <iostream>

using namespace std;

int main() {
    int a[]={-2,3,1,-5};
    int sum=0;
    int ans=0;
    int n=sizeof(a)/sizeof(a[0]);
    for(int i=0;i<n;i++){
        sum+=a[i];
        if(sum<1){
            sum=-sum;
            ans+=sum+1;
            sum=1;
        }
    }
    cout << ans << "\n";
    return 0;
}
0 голосов
/ 20 июня 2020
import java.util.List;
import java.util.Arrays;
import static java.lang.System.out;
class Playground {
    private static boolean doesRunningTotalNeverGoBelowOneForSeed(
      List<Integer> list, 
      Integer seed 
    ) {
        boolean result = true;
        int total = seed;
        for (Integer i : list) {
            total += i;
            if (total < 1) {
                result = false;
                break;
            }
        }
        return result;
    }
    public static void main(String[ ] args) {
        Integer[] a = {-5, 4, -2, 3, 1, -1, -6, -1, 0, -5};//{-2,3,1,-5};
        List<Integer> list = Arrays.asList(a);
        out.println(doesRunningTotalNeverGoBelowOneForSeed(list, 13)); //4, 6
    }
      
}

Я бы так и сделал.

0 голосов
/ 29 июля 2020

Следующий код решил проблему:

public int minX(int[] nums) {
    int startValue = 0; //Integer.MIN_VALUE
    for (int x = startValue; x <= Integer.MAX_VALUE; x++) {
        int sum = x;
        for (int n : nums) {
            sum += n;
            if (sum < 1) {
                break;
            }
        }
        if (sum >= 1) {
            return x;
        }
    }
    return 0;
}
0 голосов
/ 20 июня 2020

Пробовал .. Работало (да локально). Если вы можете предоставить более подробную информацию о TC, для которых он терпит неудачу в ранге хакера, и, возможно, вы также можете попробовать добавить некоторый sysout, чтобы лучше узнать. Возможно, вы тоже можете опубликовать ссылку на ранг хакера :)

public static int minX(List<Integer> arr) {
        int x = 0;
        arr.remove(0);
        while (true) {
            int sum = x;
            for (Integer i : arr) {
                sum += i;
            }
            if (sum == 1) {
                return x;
            } else {
                x++;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...