【发布时间】:2016-10-21 08:33:28
【问题描述】:
我尝试了Fish problem on Codility,并获得了 75% 的正确率,因为结果报告说我的代码未能通过一个简单的测试用例。结果不报告为测试用例提供了什么输入。
您能帮我找出我的代码有什么问题以及它会失败的极端情况吗?
using System;
public class Solution
{
// Time complexity: O(N)
// Space complexity: O(N)
public int solution(int[] sizes, int[] direction)
{
if (sizes == null || direction == null)
throw new ArgumentNullException();
var sizesLen = sizes.Length;
var directionLen = direction.Length;
if (sizesLen != direction.Length)
throw new ArgumentException();
var len = sizesLen;
if (len <= 1) return len;
var survivors = new Fish[len];
survivors[0] = new Fish(sizes[0], direction[0]);
var curr = 0;
for (int i = 1; i < len; i++)
{
var fish = new Fish(sizes[i], direction[i]);
if (survivors[curr].Direction == 1 && fish.Direction == 0)
{
if (fish.Size < survivors[curr].Size) continue;
while(curr >= 0 &&
fish.Size > survivors[curr].Size &&
survivors[curr].Direction == 1)
{
curr--;
}
}
survivors[++curr] = fish;
}
return ++curr;
}
}
public class Fish
{
public Fish(int size, int direction)
{
Size = size;
Direction = direction;
}
public int Size { get; set; }
public int Direction { get; set; }
}
【问题讨论】:
-
是超时错误还是错误回答错误??
-
假设 A = [ 99, 98, 92, 91, 93 ],并且 B = [1, 1, 1, 1, 0]。您的代码给出的答案为 3。预期答案 = 2
标签: c# algorithm data-structures computer-science