1. 程式人生 > >LeetCode283:移動零

LeetCode283:移動零

給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]輸出: [1,3,12,0,0]說明:
1、必須在原陣列上操作,不能拷貝額外的陣列。
2、儘量減少操作次數。

解析:

        如果沒有時間的限制,可以用額外陣列來完成,但是題目中有限制,就不能採用這種方法了。需要用到雙指標的方法,一個指標start指到當前第一個0的位置,end指到當前遍歷位置,用遍歷到的非0元素去覆蓋0元素,然後在陣列的尾部新增0元素即可。

程式碼:

void moveZeroes(vector<int>& nums) 
{
	if (nums.empty())
		return;
	int start = 0;//定義兩個指標
	int end = 0;
	while (end < nums.size())//遍歷陣列,用非零元覆蓋零元
	{
		if (nums[end] != 0)
		{
			nums[start] = nums[end];
			start++;
			end++;
		}
		else
		{
			end++;
		}
	}
	while (start < nums.size())//最後一個非零元后面全部設定為0
	{
		nums[start] = 0;
		start++;
	}
}