双指针法
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。
283. 移动零 - 力扣(LeetCode)
//双指针:快指针找找非0;慢指针找0
//每次快指针找到非0值,就和慢指针交换,这样就把非零值前移,0值后移
class Solution {
public void moveZeroes(int[] nums) {
// slowIndex 用于记录非零元素的位置
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
// 当fastIndex指向非零元素时进行处理
if (nums[fastIndex] != 0) {
// 将非零元素交换到slowIndex的位置
nums[slowIndex] = nums[fastIndex];
// 仅当交换发生时(说明slowindex处为0),更新fastIndex
if (fastIndex != slowIndex) {
nums[fastIndex] = 0;
}
// 只有非零元素才能使slowIndex后移
slowIndex++;
}
}
}
}