跟着左神学算法1.0-前缀和数组、对数器和随机行为

1.求一个数组从某个下标开始到某个下标结束的累加和?

eg:arr[10] = {1,32,4,6,21,2,-12,14,5,-6}

思路1:新增一个temp数组,此数组的目的是求出从初始位置当前位置的累加和:temp[10] = {1,33,37,43,64,66,54,68,73,67},然后不论是求下标多少到多少的累加和,只需要求出temp下标后面数减去前面数下标的差即可:

  eg:求下标3-7的累加和:temp[7]-[3] = 68-43 = 25(下标从0开始)

思路2:当查询量过大的时候,可以考虑如下方法:

  新增一个temp二维数组,也是求累加和,此时只需要求从初始位置当前位置的累加和(二维数组只需要求对角线之上的即可):

  当球下标3-7的累加和只需要temp[3][7]即可。

2.Math.random()方法:返回一个double类型的从0-1左闭右开的随机数。

  2.1如何得到一个从0-1左闭右开,但是出现的几率是x*x的概率的数?

  Math.max(Math.random(),Math.random());

原因:eg:想得到一个0-0.3的数,第一次radom得到某0-0.3数的概率是0.3,只有当第二个也小于0-0.3,才会返回0-0.3的数字,所以概率是x*x。

那么:Math.min(Math.random(),Math.random());得到的概率是什么? 得到在0-0.3概率是:不好直接求,所以我们求不在0-0.3上的概率:(1-x)*(1-x),然后再求在0-0.3:  1-(1-x)*(1-x),正面:第一个是0-0.3,第二个也是;第一个是,第二个不是;第一个不是,第二个是。

 

posted @ 2021-02-25 21:52  c++c鸟  阅读(63)  评论(0编辑  收藏  举报