作为学习c#的一部分,我参加了codesignal挑战。到目前为止,除了标题所述的测试之外,我的所有内容都很好。
问题在于,当数组长度为10^5且连续元素(k)的数量为1000时,我的代码效率不够,在3秒内无法运行。我的代码运行如下:
网站上所有可见的测试都通过了,但当涉及到隐藏测试时,在第20个测试中出现了错误,错误信息如下:
19/20个测试已通过。在第20个测试中,执行时间限制超过了:程序超过了执行时间限制,请确保它对任何可能的输入在几秒钟内完成执行。
我还尝试解锁解决方案,但是在C#上,代码与此类似,但是他没有使用LINQ。我还尝试与隐藏测试一起运行,但是出现了同样的错误,这很奇怪,因为它甚至没有通过所有测试就被提交为解决方案。
有没有更快的方法来获取数组的总和?
我还考虑解锁隐藏测试,但我认为这不会给我任何具体的解决方案,因为问题仍然存在。
问题在于,当数组长度为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;
}
网站上所有可见的测试都通过了,但当涉及到隐藏测试时,在第20个测试中出现了错误,错误信息如下:
19/20个测试已通过。在第20个测试中,执行时间限制超过了:程序超过了执行时间限制,请确保它对任何可能的输入在几秒钟内完成执行。
我还尝试解锁解决方案,但是在C#上,代码与此类似,但是他没有使用LINQ。我还尝试与隐藏测试一起运行,但是出现了同样的错误,这很奇怪,因为它甚至没有通过所有测试就被提交为解决方案。
有没有更快的方法来获取数组的总和?
我还考虑解锁隐藏测试,但我认为这不会给我任何具体的解决方案,因为问题仍然存在。
O(N)
的算法来解决这个问题,例如 https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/ - Matthew Watson