LeetCode(一)

    1. 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;
      
          }
      }
    1. 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; } }
  1.  

     

    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;
      
          }
      }

       

        

         

        
posted @ 2021-08-28 19:28  张紫韩  阅读(37)  评论(0编辑  收藏  举报