这会产生我的指针最终位于数组之外的问题。但是当我在 VS Code 中运行我的程序时,这种情况不会发生。
LeetCode 问题编号。 42
说明:上面的高程图(黑色部分)用数组[0,1,0,2,1,0,1,3,2,1,2,1]表示。在这种情况下,有 6 个单位的雨水(蓝色部分)被截留。
两次测试均使用数组。
j = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 }
VS 代码方法
private static int Trap(int[] height)
{
int rechts = 1;
int links = 0;
int zwischen = 0;
int erg = 0;
while (links <= height.Length - 1)
{
while (height[links] > height[links + rechts])
{
zwischen += (height[links] - height[links + rechts]);
rechts++;
if (links + rechts > height.Length - 1)
{
zwischen = 0;
rechts = 1;
links++;
}
if (links >= height.Length - 1)
{
return erg;
}
}
if (height[links] <= height[links + rechts])
{
erg += zwischen;
Console.WriteLine(" links = " + links + " rechts = " + rechts + " zwischen = " + zwischen + " erg = " + erg);
zwischen = 0;
links += rechts;
rechts = 1;
}
}
return erg;
}
控制台
links = 0 rechts = 1 zwischen = 0 erg = 0
links = 1 rechts = 2 zwischen = 1 erg = 1
links = 3 rechts = 4 zwischen = 4 erg = 5
links = 8 rechts = 2 zwischen = 1 erg = 6
6
Leet代码
public int Trap(int[] height) {
int rechts = 1;
int links = 0;
int zwischen = 0;
int erg = 0;
while (links <= height.Length - 1)
{
while (height[links] > height[links + rechts])
{
zwischen += (height[links] - height[links + rechts]);
rechts++;
if (links + rechts > height.Length - 1)
{
zwischen = 0;
rechts = 1;
links++;
}
if (links >= height.Length - 1)
{
Console.WriteLine("hi");
return erg;
}
}
if (height[links] <= height[links + rechts])
{
erg += zwischen;
Console.WriteLine(" links = " + links + " rechts = " + rechts + " zwischen = " + zwischen + " erg = " + erg);
zwischen = 0;
links += rechts;
rechts = 1;
}
}
return erg;
}
控制台相同数组
links = 0 rechts = 1 zwischen = 0 erg = 0
links = 1 rechts = 2 zwischen = 1 erg = 1
links = 3 rechts = 4 zwischen = 4 erg = 5
links = 8 rechts = 2 zwischen = 1 erg = 6
"hi"
links = 0 rechts = 5 zwischen = 9 erg = 9
错误
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
At Solution.Trap(Int32[] height)
At __Driver__.Main(String[] args)
我知道 VS Code 函数是静态的,而 LeetCode 不是。但两者都应该在 return 语句之后停止执行。我什至尝试(LeetCode)更改最后一个 if 语句的条件,其中我将 zwischen 添加到 erg 中。我的解决方案是在 retun 语句前面添加一个布尔值“fertig”。这样最后一个 if 语句就不再执行了,但它仍然执行了。
(height[links] <= height[links + rechts] && fertig = false)
您的答案适用于第一个输入,但它正在运行两个测试用例。使用以下输入在 VS 中尝试您的代码,您将看到:
height = [4,2,0,3,2,5]
如果您只想得到提示而没有解决的答案,我建议在
height
数组上添加边界检查,或使用上面列出的数组逐行调试..