華爲的一道面試題的解答

題目:

int A[nSize],其中隱藏着若干0,其餘非0整數,寫一個函數int Func(int* A, int nSize),使A0移至後面,非0整數移至

數組前面並保持有序,返回值爲原數據中第一個元素爲0的下標。(儘可能不使用輔助空間且考慮效率及異常問題,註釋規範且給出設計思路)

 

程序如下:不使用輔助空間

int Func(int* A, int nSize)
{
 if(A == NULL)
 {
  return -1;
 }

 if(nSize < 1)
 {
  return 0;
 }

 int count = 0;
 //計算所有爲0的元素個數
 for(int k = 0; k < nSize; k++)
 {
  if(A[k] != 0)
  {
   count++;
  }
 }
 if(count == 0)
 {
  return count;
 }

 int i = 0;
 int num = nSize;
 while(i < num)
 {
  if(A[i] == 0)
  {
   // 其後所有元素前移
   for(int j = i; j < nSize - 1; j++)
   {
    A[j] = A[j+1];
   }
   A[--num] = 0;
   
   continue;
  }
  i++;
 }
 return count;
}

 

最好情況:該數組中沒有爲0元素,時間複雜度爲O(n);

最壞情況:該數組中全部爲0元素,時間複雜度爲O(n/2*n/2);

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