一、题目
已知f()函数以概率p输出1,以概率1-P输出0。要求实现g()等概率的输出1和0
二、解题方法
最常见的方法就是让该函数两次输出,两次输出结果为01
和10
的概率肯定是一样的。
【例子】
package leetcode.com.zuoshen;
import java.util.Random;
public class EqualProbabilityReturn {
public static void main(String[] args) {
int[] nums1=new int[2];
int[] nums2=new int[2];
for(int i=0;i<10_000000;i++) {
nums1[f()]++;
nums2[f1()]++;
}
System.out.println("nums1中0:"+nums1[0]+"1:"+nums1[1]);
System.out.println("nums2中0:"+nums2[0]+"1:"+nums2[1]);
System.out.println("-----");
System.out.println("f1函数中返回1的概率是"+(double)nums2[1]/(nums2[0]+nums2[1]));
System.out.println("f函数中返回1的概率是"+(double)nums1[1]/(nums1[0]+nums1[1]));
}
private static int f1() {
int ans=0;
do {
ans=(f()<<1)+(f()<<0);
}while(ans==3||ans==0);
return ans==1?0:1;
}
private static int f() {
//百分之89的概率返回0,百分之11的概率返回1
return Math.random()>0.89?1:0;
}
}