演算法練習:兩指標之有序陣列去重
阿新 • • 發佈:2019-01-04
問題描述
給出一個有序陣列,就地移除重複元素,保持每個元素只出現一次,並返回新陣列的長度。
問題分析
這個比較簡單,直接使用兩個指標,一個在前,一個在後,掃描一遍陣列即可。時間複雜度為O(n^2)。
比如陣列A = { 1,1, 2, 3, 3 },看下圖,思想簡單明瞭。
程式碼實現
#include <iostream> using namespace std; //去除陣列中重複的數字,返回新陣列的長度 int RemoveDuplicate( int nArray[], int nCount ) { int i = 0; int j = i + 1; for( ; j < nCount; ++j ) { //j在i的前面走 //如果兩者值不同,則在i+1位置儲存j位置的數值 if( nArray[i] != nArray[j] ) { nArray[++i] = nArray[j]; } } return i + 1; } int main() { int nArray[] = { 1, 1, 2, 3, 3 }; int nLen = RemoveDuplicate( nArray, _countof( nArray ) ); for( int i = 0; i < nLen; ++i ) { cout << nArray[i] << " "; } cout << endl; return 0; }
系列文章說明:
1.本系列文章[演算法練習],僅僅是本人學習過程的一個記錄以及自我激勵,沒有什麼說教的意思。如果能給讀者帶來些許知識及感悟,那是我的榮幸。
2.本系列文章是本人學習陳東鋒老師《進軍矽谷,程式設計師面試揭祕》一書而寫的一些心得體會,文章大多數觀點均來自此書,特此說明!
3.文章之中,難免有諸多的錯誤與不足,歡迎讀者批評指正,謝謝.
作者:山丘兒
轉載請標明出處,謝謝。原文地址:http://blog.csdn.net/s634772208/article/details/46729477