【发布时间】:2022-01-14 10:27:51
【问题描述】:
在示例 [0,0,1] 处失败,输出为 [0,1,0] 而不是 [1,0,0]。我在调试模式下浏览了代码,当p1变为0时,它跳出for循环,我不明白为什么,因为它应该再循环一次,然后递减到-1并退出循环.
给定一个整数数组 nums,将所有 0 移到它的末尾,同时保持非零元素的相对顺序。 请注意,您必须在不复制数组的情况下就地执行此操作。
示例 1:
输入:nums = [0,1,0,3,12] 输出:[1,3,12,0,0]
示例 2:
输入:nums = [0] 输出:[0]
package random.leetCode;
import java.util.Arrays;
public class MoveZeroes_TwoPointers_283 {
public void moveZeroes(int[] nums) {
int p2 = 0;
int tempIndex = 0;
int lastIndex = nums.length - 1;
for (int p1 = nums.length - 1; p1>=0; p1--)
{
if (nums[p1] == 0)
{
if (p1 == nums.length - 1 && nums.length == 1)
{
break;
}
tempIndex = p1;
p2 = p1 + 1;
while (p2 <= lastIndex)
{
int temp = nums[p1];
nums[p1] = nums[p2];
nums[p2] = temp;
p2 += 1;
p1 += 1;
}
p1 = tempIndex -1;
lastIndex--;
}
}
}
public static void main(String[] args) {
MoveZeroes_TwoPointers_283 example = new MoveZeroes_TwoPointers_283();
// int[] numbersToBeSorted = new int[]{0,1,0,3,12,0,11,0,0};
// int[] numbersToBeSorted = new int[]{0};
// int[] numbersToBeSorted = new int[]{0,0};
// int[] numbersToBeSorted = new int[]{1};
// int[] numbersToBeSorted = new int[]{1,1};
int[] numbersToBeSorted = new int[]{0,0,1};
example.moveZeroes(numbersToBeSorted);
System.out.println(Arrays.toString(numbersToBeSorted));
}
}```
【问题讨论】:
标签: java for-loop pointers data-structures