/*
題目:一個數組,下標從0到n,元素為從0到n的整數。判斷其中是否有重復元素
解題思路:循環遍歷數組中的每一個元素i,如果其值為-1,說明該元素已經處理完畢。
否則,首先判斷其值是否與下標一樣(a[i]==i),
如果不一樣,則將其值作為下標(記t=a[a[i]]),判斷a[t]==-1,如果成立,則表示有重復的。
否則,令a[i]=a[t],a[t]=-1。表示新下標t的元素已經處理完畢。
再次判斷新的a[i]是否與下標一樣...
詳細看代碼...
*/
#include "stdafx.h"
#include <iostream>
using namespace std;
//返回1表示有相同的,0表示沒有
int HasSame(int a[], int n)
{
for (int i=0; i<=n; i++)
{
while (a[i] != i && a[i] != -1)
{
if (a[a[i]] == -1)
{
return 1;
}
a[i] = a[a[i]];
a[a[i]] = -1;
}
if (a[i] == i)
{
a[i] = -1;
}
}
return 0;
}
#define N 4
int _tmain(int argc, _TCHAR* argv[])
{
int a[N] = {0,2,3,3};
int iHasSame = HasSame(a, N);
cout<<iHasSame<<endl;
return 0;
}
posted on 2008-06-03 10:51
水 閱讀(3098)
評論(6) 編輯 收藏 引用 所屬分類:
算法與數據結構