给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺
时间: 2024-05-02 08:19:02 浏览: 16
序不变。
例如,给定 nums = [0, 1, 0, 3, 12],将数组中的 0 移动到末尾,得到 nums = [1, 3, 12, 0, 0]。
一种简单的方法是使用双指针,遍历数组,将非零元素前移,同时记录移动的位置。最后将记录的位置之后的元素全部设为 0。
代码如下:
```
void moveZeroes(vector<int>& nums) {
int n = nums.size();
int i = 0, j = 0;
while (j < n) {
if (nums[j] != 0) {
nums[i] = nums[j];
i++;
}
j++;
}
while (i < n) {
nums[i] = 0;
i++;
}
}
```
时间复杂度为 O(n),空间复杂度为 O(1)。
相关问题
给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序 c语言
中的代码怎么写?
好的,我会根据您的问题进行回答。以下是 C 语言中实现上述功能的代码:
```
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;
}
}
```
该函数接收一个整数数组和数组大小作为参数,将所有的 0 移动到数组的末尾,同时保持非零元素的相对顺序。实现方法是定义两个指针 i 和 j,i 从头到尾遍历数组,j 指向数组中第一个 0 的位置,每当 i 指向非 0 元素时,就将该元素移动到 j 的位置,并将 j 后移一位。最后将剩余的位置全部填充为 0。
请注意,此函数仅适用于整数数组。如果输入的数组是其他类型,需要相应地进行修改。
给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺 序。
好的,这是一个比较典型的问题。可以使用双指针的方法实现。定义两个指针 i 和 j,分别从数组的左右两端开始,如果 nums[i] 是非零元素,就将 i 加 1;如果 nums[j] 是零元素,就将 j 减 1。当 i < j 时,交换 nums[i] 和 nums[j],直到 i >= j 为止。这样就可以将所有的零元素移动到数组的末尾,同时保持非零元素的相对顺序。