我正在练习一些leetcode,我对它很陌生。所以,有一个问题,你需要将0向右移动。我写了代码,输出如预期的那样,但结果产生了[]。有人能解释错在哪里吗?这里是我的代码片段.
[]
这就是结果。
的正如你在stdout中可以清楚地看到的,输出是正确的,但答案是一个空列表。我做错了什么?我感谢你的帮助。谢谢。
stdout
knpiaxh11#
好的,这个问题是基于原地操作的,你的逻辑很正确。我会用三件事来解释,这样你就清楚了。
1.良好的编程实践:-
输出结果为[],因为第19行中有明确的语句
//19 nums.clear(); //20 nums=nonZeroArray;
字符串
**思路:-**nums被清除,nonZeroArray的内容被复制到nums。**实际情况:-**但在这种情况下,如果我们使用clear,那么结果将被清除,即[]和第20行没有任何影响。Proof:-->由于问题是在原地遍历,所以不要使用clear语句。这是不好的编程习惯。代替第19行和第20行,你可以尝试这样做
for(int i=0; i<nums.length; i++) { nums[i]=nonZeroArray[I]; }
型不要使用clear,而不是一个元素接一个元素地复制,你会得到结果。
**2.逻辑纠正:-**即使这样做,你会得到错误,因为代码中有逻辑错误。
问题是如果数组是[0,1,0,3,12]。输出应该是[1,3,12,0,0]。将零推到结尾。在第2行,不需要排序函数。假设以k =[0,2,1]为例。输出应该是[2,1,0]。如果我们在第2行排序,那么输出将是[1,2,0],这是错误的。所以不要排序。
最后更正的代码将是:-
class Solution { void moveZeroes(List<int> nums) { List<int> nonZeroArray=[]; for(int i=0; i<nums.length; i++){ if(nums[i]!=0){ nonZeroArray.add(nums[i]); } } if(nums.length != nonZeroArray.length){ int rem=nums.length-nonZeroArray.length; for(int i=0; i<rem; i++){ nonZeroArray.add(0); } // print(nonZeroArray); } // nums.clear(); // nums=nonZeroArray; for(int i=0; i<nums.length; i++) { nums[i]=nonZeroArray[I]; } } }
型
3.使用原地遍历的良好编程实践->不要尝试使用额外的变量(如nonZeroArray)。在原地遍历的情况下,尝试在nums本身中求解,替代代码:-
class Solution { void moveZeroes(List<int> nums) { int listLenght = nums.length; nums.removeWhere((element) => element == 0); int listRemaningLenght = listLenght - nums.length; for (var i = 0; i < listRemaningLenght; i++) { nums.add(0); } } }
型我希望这消除了你的疑虑。谢谢编程快乐谨致问候:
Rakshath U Shetty,伊斯坦布尔
1条答案
按热度按时间knpiaxh11#
好的,这个问题是基于原地操作的,你的逻辑很正确。我会用三件事来解释,这样你就清楚了。
1.良好的编程实践:-
输出结果为[],因为第19行中有明确的语句
字符串
**思路:-**nums被清除,nonZeroArray的内容被复制到nums。
**实际情况:-**但在这种情况下,如果我们使用clear,那么结果将被清除,即[]和第20行没有任何影响。
Proof:-->由于问题是在原地遍历,所以不要使用clear语句。这是不好的编程习惯。代替第19行和第20行,你可以尝试这样做
型
不要使用clear,而不是一个元素接一个元素地复制,你会得到结果。
**2.逻辑纠正:-**即使这样做,你会得到错误,因为代码中有逻辑错误。
问题是如果数组是[0,1,0,3,12]。输出应该是[1,3,12,0,0]。将零推到结尾。
在第2行,不需要排序函数。假设以k =[0,2,1]为例。输出应该是[2,1,0]。如果我们在第2行排序,那么输出将是[1,2,0],这是错误的。所以不要排序。
最后更正的代码将是:-
型
3.使用原地遍历的良好编程实践->不要尝试使用额外的变量(如nonZeroArray)。在原地遍历的情况下,尝试在nums本身中求解,
替代代码:-
型
我希望这消除了你的疑虑。
谢谢编程快乐
谨致问候:
Rakshath U Shetty,伊斯坦布尔