首页 > 解决方案 > 如何查看 Codility(和其他站点)测试的输入值?

问题描述

因此,我为第9 课中的 MaxProfit 练习(链接到任务描述)编写了一个解决方案,以供程序员使用。我得到了 88% 的最终分数(代码在底部,但请随意阅读整篇文章,我详细解释了我的问题是关于什么的,我相信是不知道如何深入阅读页面代码的问题,但可能无法从客户端访问此类信息,我不知道)。

这是我正在解决的第 25 个练习,所有以前的练习都以 100% 的最终分数完成,当然,我仍然在拖着几周前的疑问,关于如何查看实际测试的 codility运行(不仅仅是测试的标题,还有得到/预期的值),因为有时它不会显示,所以你不得不猜测,即使它总是让你知道你可能在哪里失败,在测试的标题中,以及当期望另一个值时从您的代码中获得什么价值。

当您获得有关失败测试的详细信息时,这是页面向您抛出的非常详细的输出。

分析总结


已检测到以下问题: 错误答案。(如果有问题,总是会显示)
[0, 2000] expected 2000 got 0 (您并不总是能获得有关输入的详细信息,但您总是会在底部获得有关失败和成功测试的更多详细信息)

在此之后,您始终可以看到以下有关测试的详细信息(即使一切正常),这很有用,但有时还不够。

以下输出是本练习中我的代码的(部分)结果(您实际上可以在此处查看包含完整结果的页面)

检测到的时间复杂度:O(N)
▶example length=6✔OK
▶simple_1 V-pattern> sequence, length=7✔OK
▶simple_desc 降序和升序长度=5✔OK
▶simple_empty empty and [0,200000] sequence✔ OK
▶two_hills 两个递增子序列
✘错误答案得到 3000 预期 99000-> 1.0.020 错误答案,得到 3000 预期 99000


正如您在上次测试中看到的那样,我得到了错误的答案。但是我看不到有关输入的详细信息,也看不到它在我的代码中是如何失败的。它只说

two_hills 两个增加的子序列并得到 3000 预期 99000

但这还不够!我[2,3,7,22, 1, 22, 51]作为输入进行了测试,它返回 50,[1, 22, 51, 2, 3, 7, 22]也返回 50,这是两个递增的子序列,对吗?所以我真的不明白。但是这个问题又是关于,我如何知道页面正在测试哪些值two_hills以及实际上是所有其他测试(正如我之前所说,它有时会在测试失败时显示输入,并非总是如此,但它从不显示成功测试的输入)。

可以在浏览器的控制台中看到此输入吗?我没能找到它。

最后,这是我的代码。


using System;

class Solution {
    public int solution(int[] A) {
        var maxProfit = 0;
        if ( A.Length > 2)
        {
            var minBuyPrice = Math.Min(A[0], A[1]);
            var maxSellPrice = minBuyPrice;
            for (int i = 2; i < A.Length; i++)
            {
                if ( minBuyPrice > A[i])
                {
                    minBuyPrice = A[i];
                    maxSellPrice = A[i];
                }
                maxSellPrice = Math.Max(maxSellPrice, A[i]);
                maxProfit = Math.Max(maxProfit, maxSellPrice - minBuyPrice);
            }
        }
        else if ( A.Length == 2)
        {
            return Math.Max(0, A[1] - A[0]);
        }
        return maxProfit;
    }
}

标签: c#arraysperformanceslicemaximum-profit-problem

解决方案


我摆脱了那个丑陋的else if陈述,得到了 100%,这是我的最终代码。

using System;

class Solution {
    public int solution(int[] A) {
        var maxProfit = 0;
        if (A.Length >= 2)
        {
            var minBuyPrice = Math.Min(A[0], A[1]);
            var maxSellPrice = Math.Max(0, A[1] - A[0]);
            maxProfit = maxSellPrice;   

            for (int i = 2; i < A.Length; i++)
            {
                if (minBuyPrice > A[i])
                {
                    minBuyPrice = A[i];
                    maxSellPrice = A[i];
                }
                maxSellPrice = Math.Max(maxSellPrice, A[i]);
                maxProfit = Math.Max(maxProfit, maxSellPrice - minBuyPrice);
            }
        }
        return maxProfit;
    }
}

推荐阅读