1. 给定一个数组 ,将所有 0 移动到数组的头部,同时保持非零元素的相对顺序,返回并打印。 例如:数组A为 [1,1,0,2], A变为 [0,1,1,2].
时间: 2024-04-30 10:22:23 浏览: 25
可以使用双指针法解决这个问题。定义一个指针i,指向当前已经处理好的非零元素的最后一个位置,初始值为-1。另一个指针j,从左到右扫描整个数组,如果遇到非零元素,就将它和i+1位置上的元素交换,并将i向右移动一位。这样,i左边的所有位置都是已经处理好的非零元素,i右边的所有位置都是0。
代码如下:
```python
def move_zeros(nums):
i = -1
for j in range(len(nums)):
if nums[j] != 0:
i += 1
nums[i], nums[j] = nums[j], nums[i]
return nums
A = [1, 1, 0, 2]
print(move_zeros(A)) # 输出 [0, 1, 1, 2]
```
相关问题
C语言代码,要求实现:给定一个数组 ,将所有 0 移动到数组的头部,同时保持非零元素的相对顺序,返回并打印
以下为实现代码:
```c
#include<stdio.h>
void moveZeroes(int* nums, int numsSize){
int i, j = 0;
for(i = 0; i < numsSize; i++){
if(nums[i] != 0){
nums[j] = nums[i];
j++;
}
}
for(i = j; i < numsSize; i++){
nums[i] = 0;
}
printf("[ ");
for(i = 0; i < numsSize; i++){
printf("%d ", nums[i]);
}
printf("]\n");
}
int main(){
int nums[] = {0, 1, 0, 3, 12};
int numsSize = 5;
moveZeroes(nums, numsSize);
return 0;
}
```
输出结果为:
```
[ 1 3 12 0 0 ]
```
希望对您有帮助。
5.给定一个整数数组 nums,将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
这道题可以使用双指针的方法来解决。我们定义两个指针 i 和 j,初始时 i 和 j 都指向数组的第一个元素。然后,我们遍历数组,如果 nums[i] 不等于 0,就将其与 nums[j] 交换,然后将 j 加 1。这样,当遍历完整个数组后,所有非零元素都被移动到了前面,同时保持了它们的相对顺序。最后,我们将 nums[j] 到数组的末尾全部置为 0。
以下是代码实现:
```
void moveZeroes(vector<int>& nums) {
int i = 0, j = 0;
while (i < nums.size()) {
if (nums[i] != 0) {
swap(nums[i], nums[j]);
j++;
}
i++;
}
while (j < nums.size()) {
nums[j] = 0;
j++;
}
}
```
时间复杂度为 O(n),空间复杂度为 O(1)。