剑指offer——抽象建模能力

面试题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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值