本文主要是介绍每日一练:LeeCode-283、移动零【数组】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
思路
- 首先初始化左指针
left
为-1,表示当前还未找到第一个非零元素,同时初始化计数器sum
为0,用于统计非零元素的个数。 - 通过一个
for
循环遍历数组中的每一个元素。 - 在循环中,首先检查当前元素是否为零,如果不为零,则将当前非零元素移动到左指针的下一个位置,并将左指针右移一位,同时更新非零元素个数。
- 循环结束后,数组前面的部分已经按顺序存放了所有的非零元素,而剩余的部分都是零元素。
- 使用一个新的
for
循环将剩余位置填充为零,保持数组的长度不变。 - 最后,数组中的所有零元素都被移动到了数组的末尾,同时保持了非零元素的相对顺序不变。
class Solution {public void moveZeroes(int[] nums) {int left = -1; // 初始化左指针为-1,表示当前还未找到第一个非零元素int sum = 0; // 初始化计数器为0,用于统计非零元素的个数for (int right = 0; right < nums.length; right++) { // 遍历数组中的每一个元素if (nums[right] != 0) { // 如果当前元素不为零nums[++left] = nums[right]; // 将当前非零元素移动到左指针的下一个位置,并将左指针右移sum++; // 非零元素个数加1}}for (; sum < nums.length; sum++) { // 将剩余的位置填充为零,保持数组的长度不变nums[sum] = 0;}}
}
这篇关于每日一练:LeeCode-283、移动零【数组】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!