此题目及解答来源于博友:http://blog.csdn.net/wanglongfei_hust/article/details/11865037
考虑到空间时间复杂度为O(n)!
#include <iostream> using namespace std; int hash_table[100]; bool judge(int *a, int len, int x) { memset(hash_table, 0, sizeof(hash_table)); for (int i=0; i<len; ++i) { hash_table[x - a[i]] = 1; } for (int i=0; i<len; ++i) { if (hash_table[i] == 1) { return true; } } return false; } int main() { int len = 10; int a[10] = {1, 3, 5, 7, 9, 4, 2, 8, 10, 6}; int x = 19; if (judge(a, len, x)) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return 0; }
#include <iostream> using namespace std; int find(int *a, int n) { int t = a[0]; int count = 0; for (int i=0; i<n; ++i) { if (count == 0) { t = a[i]; count = 1; continue; } else { if (a[i] == t) { count++; } else { count--; } } } return t; } int main() { int n = 10; int a[10] = {1, 2, 2, 2, 2, 4, 3, 3, 2, 6}; cout<<find(a, n)<<endl; return 0; }