【发布时间】:2022-01-23 23:28:06
【问题描述】:
我正在尝试解决 LeetCode 的二和问题。在这个问题中,给定一个名为 nums 的整数数组和一个包含名为 target 的整数的变量。问题是要求返回一个数组,其中包含两个数字的索引,这些数字加起来就是目标。
例如,您有 nums = [2,7,11,15] 和 target= 9。预期输出将是 [0,1],因为 2+7 = 9。
我的代码(如下所示)适用于上面的示例,但是,它不适用于 LeetCode 检查的第二个示例:nums= [3,2,4], target = [6], expected 结果是 [1,2]
我想知道为什么我的代码不适用于第二个示例,以及如何修改它以使其正常工作。
我用于此问题的代码:
public class Solution {
public int[] TwoSum(int[] nums, int target) {
//Initializing i, k and sum variables
int i=0;
int k= 0;
int sum= 0;
for(i=0; i<= nums.Length-1 ; i++)
{
if(i< nums.Length)
{
k= i+1;
sum= nums[i] + nums[k];
if(sum== target)
{
//Returns an array in the compiler containing the values of i and k.
return new int[] {i, k};
} else
{
return new int[0];
}
} else
{
return Array.Empty < int > ();
}
}
return new int[0]; //Returns an empty array if the solution is not found
}
}
提前谢谢你!
【问题讨论】:
-
你在调试器中单步调试过代码吗?
-
另外,请解释一下“不起作用”是什么意思。它会返回不正确的结果吗?抛出异常?
-
正如 madreflection 所提到的,理解的第一步是使用调试器逐步完成。如果您在 VS Studio 中编写,请设置一个断点,然后查看步骤按钮以在代码执行时浏览代码。乍一看,您的代码似乎在第一次执行 for 循环时立即返回(您有 return 语句,贯穿始终,因此它永远不会进入循环的下一次迭代)。它第一次工作的原因是因为解决方案恰好在第一次迭代中。
-
从循环中返回空数组的两个地方看起来很可疑。它们禁止您的代码搜索更多解决方案。
-
我觉得 LeetCode 中的编译器让我很困惑。我知道我需要做 LeetCode 题来练习,但我觉得在 Visual Studio 上做题比使用他们的编译器更容易。
标签: c#