計數思想(相似於hash值)

//判斷數組中是否有重複元素,最直接的思路是用雙層循環判斷(O(n ^ 2));
//也能夠先排序,後比較,但基於比較的排序時間複雜度至少爲O(n*logn).
//因此,這些思路都不行。根據題目的限制條件,很容易想到用計數排序,時間複雜度爲O(n),這固然知足題意,可是,把計數排序用在此處,無疑是大材小用了。
//在計數排序中,有一個關鍵的步驟是計數,本題就能夠利用計數排序中的計數思想(有點相似於哈希),程序代碼以下:ios

#include<iostream>
using namespace std;數組

void print(bool b)
{
if (b)
cout << "yes" << endl;
else
cout << "no" << endl;
}
typedef struct Hashtable
{
int value;
int count;
}hash;
bool hasTheSameNumber(int a[], int n)
{
int *p = new int[n];
//int *p=new hash[n];
int i;
for (i = 0; i < n; i++) //置0
{
p[i] = 0;
}
for (i = 0; i < n; i++) //開始計數
{
p[a[i] - 1]++;
//p[i].value=a[i]%n;
//p[i].count++;
}
for (i = 0; i < n; i++)
if (p[i] > 1) //有重複 //p[i].count
return true;
delete[] p;spa

return false;
}排序

int main()
{
int a[] = { 1, 3, 4, 2, 5 };
int b[] = { 1, 6, 2, 3, 4, 1 };hash

print(hasTheSameNumber(a, 5));
print(hasTheSameNumber(b, 6));
return 0;
}io

相關文章
相關標籤/搜索