天勤算法题积累
寻找主元素
线性表真题 3:一个数组有 N 个元素,其中有超过 N/2 的元素相同,请找出这个元素。时间复杂度为 O(n)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
int major_element(int A[], int n) { int seed = A[0]; int cnt = 1; int p; for (int i = 1; i < n; i++) { if(seed == A[i]) cnt++; else if(cnt>0) cnt--; else seed = A[i]; } cnt = 0; for(int i = 0; i < n; i++) if(A[i] == seed) cnt++; if(cnt > (n>>1)) return p; return -1; }
|
求 N 个字符的全排列
栈与队列思考题 2:对 n 个不同的字符进行全排列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
void perm(int str[], int k, int n) { int i, j; int temp; if (k == 0) { for (i = 0; i < n; i++) cout << str[i]; cout << endl; } else { for (i = 0; i <= k; i++) { temp = str[k]; str[k] = str[i]; str[i] = temp; perm(str, k-1, n); temp = str[k]; str[k] = str[i]; str[i] = temp; } } }
|