🌕 283. 移动零
2022年6月9日
- algorithm
🌕 283. 移动零
难度: 🌕
问题描述
解法 1 - original
class Solution {
public void moveZeroes(int[] nums) {
// 思路:
// 快慢指针 - 画图理解
int len = nums.length;
// 特殊情况特判
if(len <= 1) {
return;
}
// len > 1
int left = 0;
int right = 1;
while(right < len) {
// left 指针找 0 元素
while(left < len && nums[left] != 0) {
left ++;
}
// right 指针从 left 指针开始往后找非 0 元素
right = left + 1;
while(right < len && nums[right] == 0) {
right ++;
}
if(right >= len) {
return; // 已经不存在非 0 元素了
}
swap(nums, left, right);
left ++;
}
}
private void swap(int[] nums, int left, int right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
}
输出 1
解法 2 - 优化了一点点
class Solution {
public void moveZeroes(int[] nums) {
// 思路:
// 快慢指针 - 画图理解
int len = nums.length;
// 特殊情况特判
if(len <= 1) {
return;
}
// len > 1
int left = 0;
int right = 1;
while(right < len) {
// left 指针找 0 元素
while(left < len && nums[left] != 0) {
left ++;
}
// right 指针从 left 指针开始往后找非 0 元素
right = Math.max(left + 1, right);
while(right < len && nums[right] == 0) {
right ++;
}
if(right >= len) {
return; // 已经不存在非 0 元素了
}
swap(nums, left, right);
left ++;
}
}
private void swap(int[] nums, int left, int right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
}