1.1.27 solution
public static double binomial(int N, int k, double p) {
if (N == 0 && k == 0) {
return 1.0;
}
if (N < 0 || k < 0) {
return 0.0;
}
double ret = (1.0 - p) * binomial(N - 1, k, p) + p * binomial(N - 1, k - 1, p);
return ret;
}
public static double binomial2(int N, int k, double p) {
double[][] ans = new double[N + 1][k + 1];
for (int i = 1; i <= N; i++) {
ans[i][0] = Math.pow(1 - p, i);
}
ans[0][0] = 1;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= k; j++) {
ans[i][j] = (1.0 - p) * ans[i - 1][j] + p * ans[i - 1][j - 1];
}
}
return ans[N][k];
}
1.1.29 solution
package com.frozenxia.algorithm.basic;
import java.lang.reflect.Array;
public class BinarySearch {
public int search(int[] arry, int target) {
int start = 0;
int end = arry.length - 1;
if (arry.length == 0)
return -1;
while (start <= end) {
int mid = (start + end) / 2;
if (arry[mid] == target)
return mid;
if (arry[mid] < target)
start = mid + 1;
if (arry[mid] > target)
end = mid - 1;
}
return -1;
}
public int rank(int[] arry, int target){
int start = 0;
int end = arry.length - 1;
if (arry.length == 0)
return -1;
while (start <= end) {
int mid = (start + end) / 2;
if (arry[mid] < target)
start = mid + 1;
if (arry[mid] >= target)
end = mid - 1;
}
return start;
}
public int count(int[]arry,int target){
int start = 0;
int end = arry.length - 1;
if (arry.length == 0)
return -1;
while (start <= end) {
int mid = (start + end) / 2;
if (arry[mid] < target)
start = mid + 1;
if (arry[mid] >= target)
end = mid - 1;
}
int x1 = start;
start = 0;
end = arry.length-1;
while (start <= end) {
int mid = (start + end) / 2;
if (arry[mid] <= target)
start = mid + 1;
if (arry[mid] > target)
end = mid - 1;
}
int x2 = start;
return x2-x1;
}
public static void main(String[] args) {
int a[] = {1,3,4,6,7,12,12,46,76,112,532};
System.out.println(new BinarySearch().search(a,13));
System.out.println(new BinarySearch().rank(a,13));
System.out.println(new BinarySearch().count(a,3));
}
}