c语言 给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
时间: 2024-06-04 07:06:35 浏览: 90
。这个问题可以使用双指针的方法来解决。设定两个指针 i 和 j,初始时分别指向数组的第一个元素。遍历整个数组,如果遇到非零元素,则将其赋值给 nums[i],并将 i 右移一位。如果遇到零元素,则 j 右移一位,直到找到下一个非零元素,并将其赋值给 nums[i],再将 i 右移一位。遍历结束后,将 j 之后的所有元素赋值为零即可。
以下是 C 语言代码实现:
void moveZeroes(int* nums, int numsSize){
int i = 0, j = 0;
while (j < numsSize) {
if (nums[j] != 0) {
nums[i++] = nums[j];
}
j++;
}
while (i < numsSize) {
nums[i++] = 0;
}
}
相关问题
C语言给定一个整数数组nums,将所有0 移动到数组的末尾,同时保持非零元素的相对顺序
:可以使用双指针法,一个指针指向当前处理的位置,另一个指针指向下一个非零元素应该存放的位置。遍历一次数组即可完成移动操作。代码实现如下:
void moveZeroes(int* nums, int numsSize){
int i, j = 0;
for (i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
while (j < numsSize) {
nums[j++] = 0;
}
}
c语言给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对
顺序不变,该怎么做?
可以使用双指针的方法,在遍历数组时,将非零元素依次往数组的头部移动,然后将剩余的位置填充为 0。代码如下:
void moveZeroes(int* nums, int numsSize){
int j = 0;
for (int i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
for (int i = j; i < numsSize; i++) {
nums[i] = 0;
}
}
笑话:为什么程序员总是喜欢用草稿纸写代码?因为那样可以使用撤销操作!
阅读全文