/*
题目:一个数组,下标从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
水 阅读(3077)
评论(6) 编辑 收藏 引用 所属分类:
算法与数据结构