失败了一个简单的HackerRank问题,没有在线学习的方法,请帮助我修复简单但错误的算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了失败了一个简单的HackerRank问题,没有在线学习的方法,请帮助我修复简单但错误的算法相关的知识,希望对你有一定的参考价值。

我在一个非常简单的问题上未能通过代码测试。但是,即使提交了错误的解决方案,我也无法发现我的逻辑出了什么问题。我想从这次失败中学习,以便下次可以做得更好,但是没有在线解决此问题的方法。

[如果有人看到我的逻辑问题,可以让我知道吗?如果这是问这个问题的错误地方,请告诉我。

我通过了2/8个测试用例,但是失败的有大量输入或无法调试的隐藏输入。我的逻辑似乎适用于我可以手工找出的情况。

Problem and my solution

下面我的解决方案的代码:

public static int efficientJanitor(List<Float> weight)

    int trips = 0;
    int currIndex = 0;
    float currWeight = 0;

    //Loop until we hit end of List
    while (currIndex < weight.size())
    
        System.out.println("currIndex weight is: " + weight.get(currIndex));
        currWeight = currWeight + weight.get(currIndex);

        //If we still have room in the current bag
        if (currWeight < 3.00)
        
            currIndex++;
        

        //We have no more room in the bag, increment trips, DONT increment 
        //currIndex so that we add weight at currIndex
        //in next loop's iteration.

        else if (currWeight >= 3.00)
        
            trips++;
            System.out.println("Trips is: " + trips);
            currWeight = 0;
        
    

    System.out.println("currWeight is: " + currWeight);
    //Possible to have another bag left after while loop terminates,
    //since loop could end without handling any 
    //remaining weight

    if (currWeight >= 1.01 && currWeight <= 3.00)
    
        trips++;
    

    return trips; 

答案

似乎您正在使用greedy算法失败,例如,在这种情况下:[1.3 3 1.3 3]给出4次旅行,而3次可能。

尝试对重量列表进行排序。然后为最小的项目找到最大的配对项目。重复第二项,依此类推。 (双索引方法在这里看起来不错)

所以[1.1 1.4 1.45 1.5 1.9 2 2.5]给出对1.1+1.91.4 +1.5

以上是关于失败了一个简单的HackerRank问题,没有在线学习的方法,请帮助我修复简单但错误的算法的主要内容,如果未能解决你的问题,请参考以下文章

尝试 - 联系人 - Hackerrank

没有指针的 C++ 分段错误 (HackerRank)

Python Hackerrank挑战给出了〜stdout没有响应〜错误

如何清除 Hackerrank 动态数组运行时错误?

使用背包解决硬币变化。参考:另一个背包 Hackerrank CodeAgon

c_cpp 总数没有。 A和B之间的2的补码表示中的1,包括在内。 Hackerrank的“2补”问题。