1. 程式人生 > >2019校招-美團-後臺開發工程師面試演算法題

2019校招-美團-後臺開發工程師面試演算法題

美團後臺開發工程師

  • 演算法題

已知有陣列a[]={0,1,0,3,0,12};
實現將陣列中的0全部移到陣列的最後,並保證其他元素是排序的 ,即輸出為a[]={1,3,12,0,0,0};
要求時間複雜度高

我的思路:

首先用兩個變數i,j來控制,兩者皆指向陣列的開始位置,用i記錄當前為0的位置,讓j++來查詢不為0的元素,找到之後將j下標的值賦值給i下標,ij再同時向後移動,直到j找到最後一個元素,此時整個陣列的全部非0數已經被放到了i下標之前的位置。從當前i下標開始到陣列結束全部賦值為0即可。演算法複雜度為O(n)

程式碼實現:

void sort(int a[],int
n) { //int n=sizeof(a)/sizeof(int);//不能在內部求陣列的長度,因為此時傳過來的陣列a已經退化成了指標,求出來的n是錯誤的。直接在引數列表中傳入陣列長度 int i=0,j=0; while(j<n) { if(a[j]==0) j++; else { if(i!=j) a[i]=a[j]; i++; j++; } } for(;i<n;++i) a[i]=0
; }