用c语言实现给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
时间: 2024-05-09 12:18:23 浏览: 102
这个问题可以使用双指针法进行解决。
首先定义两个指针:j和i,初始时,i和j都指向数组的开头。
我们遍历整个数组,当遇到非零元素时,将其赋值到nums[j]上,同时i和j均向后移动一位。
当遇到0时,i向后移动一位,但是j不移动,这是因为我们需要将0移动到数组的末尾,j继续指向当前非零元素应该所在的位置。
最终,当i遍历完整个数组时,j之后的所有元素均应该是0,因为i和j之间的所有元素都是非零元素,而j之后的所有元素都被i赋值为了0.
下面是该算法的C实现代码:
```
void moveZeroes(int* nums, int numsSize){
int i,j;
j=0;
for(i=0;i<numsSize;i++){
if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
for(;j<numsSize;j++){
nums[j]=0;
}
}
```
需要注意的是,我们将0移动到数组的末尾时,只需要将nums[i]赋值为0即可,不需要进行j的移动操作。
相关问题
用C语言写给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
```
#include <stdio.h>
void moveZeroes(int* nums, int numsSize){
int i, j, temp;
for(i=0, j=0; i<numsSize; i++){
if(nums[i] != 0){
temp = nums[i];
nums[i] = nums[j];
nums[j++] = temp;
}
}
}
int main(){
int nums[] = {0, 1, 0, 3, 12};
int numsSize = sizeof(nums)/sizeof(nums[0]);
moveZeroes(nums, numsSize);
for(int i=0; i<numsSize; i++){
printf("%d ", nums[i]);
}
return 0;
}
```
c语言 给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
。这个问题可以使用双指针的方法来解决。设定两个指针 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;
}
}
阅读全文