给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
时间: 2024-05-13 19:14:31 浏览: 58
好的,这个问题可以使用双指针法解决,具体步骤如下:
1. 定义两个指针i和j,初始时i=0,j=0。
2. 遍历数组nums,如果nums[i]为0,则i++,否则将nums[i]赋值给nums[j],并同时i++和j++。
3. 遍历完成后,j之后的元素全部置为0,即可得到结果。
实现代码如下:
```
void moveZeroes(vector<int>& nums) {
int i = 0, j = 0;
while (i < nums.size()) {
if (nums[i] != 0) {
nums[j] = nums[i];
j++;
}
i++;
}
while (j < nums.size()) {
nums[j] = 0;
j++;
}
}
```
希望能够帮助您!
相关问题
给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
。示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
解法:
思路:双指针,一个指针指向下一个非零数应该存储的位置,一个指针遍历整个数组。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int index = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
nums[index++] = nums[i];
}
}
for (int i = index; i < nums.size(); i++) {
nums[i] = 0;
}
}
};
给定一个整数数组 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。
请注意,此函数仅适用于整数数组。如果输入的数组是其他类型,需要相应地进行修改。
阅读全文