LeetCode283.移动零
给定一个数组 arr,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2
输入: nums =[0]
输出:[0]
#include <iostream>
using namespace std;
//给定一个数组,将所有的0移动到数组末尾,同时保持非零元素相对顺序;//int arr[5] = { 0,1,0,3,12 };//移动后 {1,3,12,0,0}
//解题思路:
//采用双指针进行指针L,R,进行遍历数组,如并进行交换位置
// 当R指针为非0时,进行交换指针L元素与R元素;交换完成后L元素位置向后增1
//其中[L,R)间数组元素为非零元素,[R,0]间的元素为零;
//
int main() {int arr[5] = { 0,1,0,3,12 };int length = sizeof(arr)/sizeof(*arr);int left = 0;for (int right = 0; right < length; right++){if (arr[right]) //指针指向的数组元素为非零则为真,进行元素交换{int temp = arr[right];arr[right] = arr[left];arr[left] = temp;++left;}}cout << "移动零后的数组" << endl;for (int i = 0; i < length; i++){cout << arr[i] << endl;}system("pause");return 0;
}