面试题60:n个骰子的点数
- 题目描述:
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
- 详细代码:
class Solution:
def GetProbability(self, n):
if n < 1:
return []
data0 = [0] + [1] * 6 + [0] * 6 * (n - 1)
data1 = [0] + [0] * 6 * n
flag = 0
for i in range(2, n + 1):
if flag:
for j in range(0, i):
data0[j] = 0
for j in range(i, 6 * i + 1):
data0[j] = 0
data0[j] = sum([data1[j - k] for k in range(1, 7) if j > k])
flag = 0
else:
for j in range(0, i):
data1[j] = 0
for j in range(i, 6 * i + 1):
data1[j] = 0
data1[j] = sum([data0[j - k] for k in range(1, 7) if j > k])
flag = 1
total = 6 ** n
res = {}
data = data1 if flage else data0
for i in range(n, 6 * + 1):
res[i] = data[i] * 1.0 / total
return res
面试题61:扑克牌中的顺子
- 题目描述:
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
- 详细代码:
# -*- coding:utf-8 -*-
class Solution:
def IsContinuous(self, numbers):
# write code here
if not numbers or len(number) < 5:
return False
numbers.sort()
NumOfZero = numbers.count(0)
for i, value in enumerate(numbers[:-1]):
if value != 0:
if value == numbers[i + 1]:
return False
NumOfZero -= (numbers[i + 1] - value - 1)
if NumOfZero < 0:
return False
return True
面试题62:圆圈中最后剩下的数字
- 题目描述:
0,1,…,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
- 详细代码:
# -*- coding:utf-8 -*-
class Solution:
def LastRemaining_Solution(self, n, m):
# write code here
if n < 1 or m < 1:
return -1
last = 0
for i in range(2, n + 1):
last = (last + m) % i
return last
面试题63:股票的最大利润
- 题目描述:
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。
- 详细代码:
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
if not prices or len(prices) < 2:
return 0
min = prices[0]
MaxProfit = prices[1] - min
for i in range(2, len(prices)):
if prices[i - 1] < min:
min = prices[i - 1]
CurProfit = prices[i] - min
if CurProfit > MaxProfit:
MaxProfit = CurProfit
if MaxPrifit >= 0:
return MaxProfit
else:
return 0