LeetCode(一)
-
package com.model.array; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/8/28 13:23 * 直方图装水问题 */ public class ArrayDemo01 { public static void main(String[] args) { int[] height={3,5,6,9,1,2,4}; System.out.println(fillWater(height)); } // 给定你一个数组,计算可以装多少水 public static int fillWater(int[] height){ // 计算i 位置可以装多少水,就就算出他左面的最大值和右面的最大值,其中较小的一个减去i位置上的值就是当前位置可以装水多少 // 为了减少计算,我们可以计算出两个数组,数组的 i 位置的值就是 0-i 的最大值 // 另一个数组 i 位置上的值就是 i - 最后 的最大值 // 的到这两个的最大值就可以计算出当前位置可以装水多少了 int len = height.length; int[] leftBig=new int[len]; int[] rightBig=new int[len]; leftBig[0]=height[0]; rightBig[len-1]=height[len-1]; for (int i = 1; i < len; i++) { leftBig[i]= Math.max(height[i], leftBig[i - 1]); } for (int i = len-2; i >=0; i--) { rightBig[i]= Math.max(height[i], rightBig[i+1]); } int res=0; for (int i = 1; i < len-1; i++) { int temp= Math.min(leftBig[i-1],rightBig[i+1])-height[i]; res+= Math.max(temp, 0); } return res; } }
-
-
-
package com.model.number; import java.util.Random; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/8/28 17:57 * 给你一个函数等概率返回0-5,把他变成等概率返回0-7的数字 */ public class NumberDemo01 { public static void main(String[] args) { NumberDemo01 demo01 = new NumberDemo01(); // for (int i = 0; i < 10; i++) { // System.out.println(demo01.cf()); System.out.println(demo01.res()); // System.out.println(demo01.f()); } // 1.变成行等概率返回1-7 for (int i = 0; i < 10; i++) { System.out.println(res1()); } } // 等概率返回0-5 public int f(){ return (int)(Math.random()*6); } // 利用 f() 函数实现等概率返回 0-7 public int cf(){ return f()<3?0:1; } //利用等概率返回三位二进制数 public int res(){ return (cf() << 2) + (cf() << 1) + cf(); }
// 2. 利用等概率返回1-5的函数,变为等概率返回1-7的函数 public static int f1(){ return (int)(Math.random()*5)+1; } // 等概率返回1-7需要的是三位二进制数 public static int cf1(){ int temp; do { temp=f1(); }while (temp==3); return temp>3?1:0; } // 利用等概率返回0和1的机制 // 我们可以求出等概率0-6的函数然后加1就可以了 public static int res1(){ int res; do { res=(cf1()<<2)+(cf1()<<1)+cf1(); }while (res==7); return res+1; } }
-
-
-
package com.model.number; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/8/28 18:51 * 等概率返回0和1 */ public class NumberDemo02 { public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.println(res()); } } // 给定一个函数p概率返回0, 1-p概率返回1,利用其创建一个等概率返回0和1的函数 public static int f(){ return (int)(Math.random()*2*0.6); } public static int res(){ int one; int two; do { one=f(); two=f(); }while (one==two); // 返回两次 如果两个数是0 1 返回0 // 如果两个数是1 0返回1 // 如果两个数相等就重新返回 return one==0?0:1; } }
-