
@Test
public void addition_isCorrect() {
int[] count = {10000, 121, 4433, 100, 121, 10};
int num = findRepeatednumber(count);
System.out.println(num);
int[] a = {1, 2, 3, 4, 5};
int[] b = {2, 3, 4, 5, 6, 7};
int[] c = reverseMergeSortArray(a, b);
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
}
//假設(shè)數(shù)組長(zhǎng)度10000,數(shù)組中的整數(shù)不大于10000
//從數(shù)組中找出唯一重復(fù)兩次的數(shù)字
public int findRepeatednumber(int[] arr) {
int[] count = new int[10001];
for (int i = 0; i < arr.length; i++) {
if (1 == count[arr[i]]) {
return arr[i];
} else {
count[arr[i]]++;
}
}
return 0;
}
//按倒序合并兩個(gè)排序好的數(shù)組
public int[] reverseMergeSortArray(int[] a, int[] b) {
int i = a.length - 1;
int j = b.length - 1;
int k = 0;
int[] c = new int[a.length + b.length];
while (i >= 0 && j >= 0) {
if (a[i] > b[j]) {
c[k++] = a[i--];
} else {
c[k++] = b[j--];
}
}
while (i >= 0) {
c[k++] = a[i--];
}
while (j >= 0) {
c[k++] = b[j--];
}
return c;
}
2.斐波那契數(shù)列
1,1,2,3,5,8,13,21,34,...算出第20個(gè)數(shù)?
/**
* 請(qǐng)第 n個(gè)數(shù)是什么
*/
public int fbnNum(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fbnNum(n - 1) + fbnNum(n - 2);
}
}
3. 一個(gè)操場(chǎng),5個(gè)跑道,用5個(gè)人跑一次可以排出來(lái)12345名,假設(shè)每個(gè)人每次跑的成績(jī)都是一樣的,但只能知道這次跑步的名次,無(wú)法知道具體的時(shí)間成績(jī),現(xiàn)在有25個(gè)人,要找出其中的123名,求最少需要使用多少次操場(chǎng)。
答案:7
轉(zhuǎn)自:https://blog.csdn.net/u010187139/article/details/45618535
思路:
- 5人一組比賽,得出每組第一名,比賽5次;
- 將第一名的5個(gè)人比賽一次得出第一名,由于要得出前三名,所以這次比賽四名和五名及所在的組都慢,就不考慮了,比賽6次;
- 在2中的第一名所在的組可能包含第二名和第三名記為 A2,A3,在2中第二名所在的組可能含第三名記為 B2,在加上2中的第三名共5人,在比賽一次得出前兩名,即為25人中的2,3名。比賽了7次。