LeetCode 在返回后继续方法

LeetCode continues method after return

提问人:Physalis 提问时间:10/28/2023 最后编辑:Physalis 更新时间:10/28/2023 访问量:49

问:

这就产生了一个问题,即我的指针最终位于数组之外。但是当我在 VS Code 中运行我的程序时,这不会发生。

LeetCode 问题编号。42

说明:上面的高程图(黑色部分)用数组[0,1,0,2,1,0,1,3,2,1,2,1]表示。在这种情况下,有 6 个单位的雨水(蓝色部分)被捕获。

将 Array 用于两个测试。

j = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 }

VS Code 方法

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

LeetCode(韭菜代码)

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)

加法 我尝试调试每一行(结尾)

if (links >= height.Length - 1)
                {
                    Console.WriteLine("end1 " + erg);
                    return erg;
                }

我让我的程序显示结果以及它使用的 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
end1 6 //Value 6 is correct. But the code doesnt terminate after return.
 links = 0 rechts = 5 zwischen = 9 erg = 9
end2
C# 编译器错误 返回

评论


答:

0赞 brett_0267 10/28/2023 #1

您的答案适用于第一个输入,但它同时运行两个测试用例。使用以下输入在 VS 中尝试代码,你将看到:height = [4,2,0,3,2,5]

如果你只是想要一个没有解决答案的提示,我建议在数组上添加边界检查,或者使用上面列出的数组逐行调试。height

评论

0赞 Physalis 10/28/2023
首先,谢谢你。您的提示最初帮助了我,直到问题再次出现,代码在返回后没有中止。我会描述情况,以防你想再看一遍。如果没有,那也没关系,无论如何都要感谢。
0赞 Physalis 10/28/2023 #2

我不知道发生了什么变化,但几个小时后我再次打开浏览器后,一切突然又恢复了。也许 leetcode 在编译时只是有一些错误

评论

0赞 AztecCodes 10/30/2023
欢迎来到 Stack Overflow!谢谢你的回答。请提供有关您的解决方案的更多详细信息。代码片段、高质量的描述或任何相关信息会很棒。清晰简洁的答案对每个人来说都更有帮助、更容易理解。使用细节编辑您的答案以提高您的答案质量。有关详细信息,请参阅操作方法:编写好的答案。祝您编码愉快!