因此,我在link to the task's description的lesson 9中为MaxProfit练习(codility for programmers)编写了一个解决方案。我的最终分数是88%(代码位于最下面,但是您可以随意阅读整篇文章,在其中详细说明我的问题,我相信这是一个不知道如何深入阅读页面代码的问题,但也许我无法从客户端访问此类信息。
这是我要解决的第25个练习,当然,所有以前的练习都以100%的最终成绩解决了,当然,我仍然在多周前就不再怀疑如何看待练习实际测试一致性的运行(不仅是测试的标题和获得/期望的值),因为有时它不显示,所以您必须猜测,即使它始终可以让您了解可能会失败的地方测试的标题,以及当期望另一个代码时从代码中获得什么价值。
当您获得有关失败测试的详细信息时,这是页面向您抛出的非常详细的输出。
分析摘要
已检测到以下问题:错误的答案。 (如果出现问题,则始终显示此问题)
[0, 2000] expected 2000 got 0
(您并不总是能获得有关 input 的详细信息,但是总能获得有关失败和成功测试的更多详细信息的底部)
此后,您始终可以看到有关测试的以下详细信息(即使一切正常),这很有用,但有时还不够。
以下输出是本练习中代码结果的一部分(您实际上可以看到包含完整结果here的页面)
检测到的时间复杂度:O(N)
▶示例长度=6✔确定
▶simple_1 V-pattern>序列,长度=7✔OK
▶simple_desc降序和升序序列长度=5✔OK
▶simple_empty为空且[0,200000]序列✔确定
▶two_hills两个递增的子序列✘WRONGANSWER
有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;
}
}
答案 0 :(得分:0)
我摆脱了那个丑陋的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;
}
}