Leecode刷題 把數組中的0移動到數組的尾部,其餘數字保持之前的相對位置不變

talk is cheap ,show me your code! 

 c++解法:

思路:兩個指針 i 和 j,一個快,一個慢。快指針i讀取到非0值,就傳到j指針指向的地方。這樣i指針跑到結尾時,j就存完了最後一個非零的數了。然後把指針 j 以後的所有數字全部變爲0就可以實現啦。

#include <iostream>

using namespace std;

int main() {
	
	int arr[]={0,3,0,5,0,23,45,0,66};
	int j = 0, len = 0;
	len=sizeof(arr)/sizeof(int);
	cout<<"len: "<<len<<endl;
	for(int i=0;i<len; i++)
	{
		cout<<arr[i]<<",";
	}
	cout<<endl;
	
	for(int i=0;i<len; i++)
	{	
	   if(arr[i] != 0)
	   {
	       arr[j++]= arr[i]; 
	   }
	}
	while(j<len)
	{
	   arr[j++] = 0;
	   
	}	
	
	for(int i=0;i<len; i++)//
	{
		cout<<arr[i]<<",";
	}
	cout<<endl;
	return 0;
}

運行結果:

len: 9

0,3,0,5,0,23,45,0,66,

3,5,23,45,66,0,0,0,0,

 

Python的解法:

# encoding: utf-8

if __name__ == "__main__":
	
	l ,r,n=0,0,len(nums)
	while r < n:
		if nums[r] != 0 :
			nums[l] = nums[r]
			l += 1
		r +=1
	while l <n:
		nums[l] = 0
		l += 1

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章