复习好C++,有时候一般的解法,C++更快
一 掷硬币
牛牛最近很喜欢掷硬币,由于他今天很无聊,所以他在家掷了n次硬币,如果这n次硬币全部朝上或者全部朝下牛牛就很开心,请问牛牛开心的概率是多少。(每次掷硬币朝上的概率与朝下的概率相同)
class Solution:
def Probability(self , n ):
# write code here
if n <= 20:
return "%.2f" % (2 ** (1 - n)+0.001)
else:
return "0.00"
本题"%.2f"可以提供四舍五入,但是比如0.125,得到的仍然是0.12,在5的情况编译器并没有入!!所以需要加上0.001!!
二 交叉乘
举例: r=1, l=5:总和就是 (a[1]a[2]+a[1]a[3]+a[1]a[4]+a[1]a[5])+ (a[2]a[3]+a[2]a[4]+a[2]a[5]) + …
==(pow((a[1] + a[2]+a[3]+a[4]+a[5]) , 2) - (a[1]**2 … + a[5]**2))//2
class Solution: # 考虑到后面还要重复算的问题,先把逻辑事先搭好。
def getSum(self , a , query ):
# write code here
out = []
n = len(a)
presum = (n+1) * [0]
presqure = (n+1) * [0]
for i in range(n):
presum[i+1] = presum[i] + a[i]
presqure[i+1] = presqure[i] + a[i]*a[i]
ans = [0] * (len(query)//2)
for i in range(0, len(query), 2):
l, r = query[i], query[i+1]
result = ((pow((presum[r] - presum[l-1]),2) -(presqure[r]-presqure[l-1]))//2) % 1000000007
out.append(result)
return out
三 玩偶摆放
思路 二分: 在有序数组中找到一个适合的位置插入。
输入:5,3,[[0,2],[4,7],[9,9]] 输出 2