移动零
- 1. 题目解析
- 2. 讲解算法原理
- 数组划分,数组分块(核心思想)
- 如何做到
- 3. 编写代码
1. 题目解析
题目地址:点这里
2. 讲解算法原理
数组划分,数组分块(核心思想)
- dest一般初始化为-1;
如何做到
首先,初始化变量 dest 和 cur,分别表示非零元素应该存储的位置和当前元素的位置。初始时,dest 被设为-1,cur 被设为0。同时,获取数组 nums 的长度 n。
进入一个循环,循环条件是 cur 小于等于 n。在每一次循环中,检查当前元素是否为非零元素。
- 如果当前元素不为零,则将 dest 的值增加 1,然后交换位置 dest 和位置 cur 上的元素。这样做的目的是将非零元素移动到数组的前部分,保持它们的相对顺序。
- 如果当前元素为零,则不进行任何操作,继续下一个循环。
这样,经过循环遍历后,所有的非零元素都会被移动到数组的前部分,而零元素会留在数组的后部分。
循环结束后,数组 nums 中的非零元素已经被移动到了前部分,并保持了它们的相对顺序。而零元素则留在了数组的后部分。
3. 编写代码
void moveZeroes(vector<int>& nums) {
int dest=-1;
int cur=0;
int n=nums.size()-1;
while(cur<=n)
{
if(nums[cur]!=0)
{
dest++;
swap(nums[dest],nums[cur]);
}
cur++;
}
}