跟着左神学算法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,第二个也是;第一个是,第二个不是;第一个不是,第二个是。