作为学习 c# 的一部分,我参与了 codesignal 挑战。到目前为止,除了标题中所述的测试之外,一切对我来说都很顺利。
问题是当数组长度为10^5且连续元素数(k)为1000时,我的代码效率不够高,无法在3秒内运行。我的代码运行如下:
int arrayMaxConsecutiveSum(int[] inputArray, int k) {
int sum = 0;
int max = 0;
for (int i = 0; i <= inputArray.Length-k; i++)
{
sum = inputArray.Skip(i).Take(k).Sum();
if (sum > max)
max = sum;
}
return max;
}
Run Code Online (Sandbox Code Playgroud)
网站上所有可见测试都运行正常,但是说到隐藏测试,在测试20中,出现了一个错误,说明
19/20 测试通过。测试 20 超出执行时间限制:程序超出执行时间限制。对于任何可能的输入,确保它在几秒钟内完成执行。
我也尝试解锁解决方案,但在 c# 上,代码与此有些相似,但他没有使用 LINQ。我还尝试将它与隐藏测试一起运行,但发生了同样的错误,这很奇怪,因为它甚至没有通过所有测试时作为解决方案提交的方式。
有没有更快的方法来获得数组的总和?
我也想过解锁隐藏测试,但我认为它不会给我任何具体的解决方案,因为问题仍然存在。
首先,我想让您知道我使用的代码与 GitHub 中可以找到的代码相同。其次,我在网上尝试了各种解决方案,例如设置标头块或放置#pragma once在 cpp 文件顶部,但仍然产生下面提到的相同错误。
我感到困惑的是如何在各种存储库中找到此代码,但我无法使用 VS 2019 构建它。
我的猜测是,我需要安装 VS 2010 才能正确构建,但我将其视为解决此问题的最后手段。
任何想法将不胜感激。谢谢。
// TextProgressCtrl.cpp : implementation file
//
// Written by Chris Maunder (chrismaunder@codeguru.com)
// Copyright 1998.
//
// Modified : 26/05/98 Jeremy Davis, jmd@jvf.co.uk
// Added colour routines
//
// TextProgressCtrl is a drop-in replacement for the standard
// CProgressCtrl that displays text in a progress control.
//
// This code may be used in compiled form in any way you desire. This …Run Code Online (Sandbox Code Playgroud)