1. 程式人生 > >演算法練習:兩指標之有序陣列去重

演算法練習:兩指標之有序陣列去重

問題描述

給出一個有序陣列,就地移除重複元素,保持每個元素只出現一次,並返回新陣列的長度。

問題分析

這個比較簡單,直接使用兩個指標,一個在前,一個在後,掃描一遍陣列即可。時間複雜度為O(n^2)

比如陣列A = { 11, 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