移动零
- 题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。 - 示例
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0] - 该题目是力扣上的一道简单题,题目给出的代码如下
void moveZeroes(int* nums, int numsSize){
}
4.解题思路
-第一种方法: right下标遍历数组,left下标指向要赋值的位置,遍历数组,把每一个不为零的数赋值给left,直接在原数组上覆盖
void moveZeroes(int* nums, int numsSize){
int left = 0; int right = 0;
while (right < numsSize)
{
if (nums[right] != 0)
{
nums[left] = nums[right];
left++;
}
right++;
}
while (left < numsSize)
{
nums[left++] = 0;
}
}
- 还有第一种方法,比较耗时,创建一个变量,用来作为交换数据的中介,利用双循环,遍历数组,如果遇到零,就移动到最后的位置
void moveZeroes(int* nums, int numsSize){
int i = 0;
int j = 0;
int n = 0;
for (j = 0; j < numsSize; j++)
{
for (i = 0; i < numsSize - 1; i++)
{
if (nums[i] == 0)
{
n = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = n;
}
}
}
}
感谢阅读,欢迎指正