Python 剪绳子的多种思路实现(动态规划和贪心)


Posted in Python onFebruary 24, 2020

剑指Offer(Python多种思路实现):剪绳子

面试14题:

题目:剪绳子

题:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,且n>1,m>1),每段绳子的长度记为k[0],k[1],k[2],...,k[m]。请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积为18。

解题思路一:基于动态规划和贪婪算法。

class Solution:
 def MaxProductAfterCut(self, n):
  # 动态规划
  if n<2:
   return 0
  if n==2:
   return 1
  if n==3:
   return 2
  products=[0]*(n+1)
  products[0]=0
  products[1]=1
  products[2]=2
  products[3]=3
 
  for i in range(4,n+1):
   max=0
   for j in range(1,i//2+1):
    product=products[j]*products[i-j]
    if product>max:
     max=product
   products[i]=max
  #print(products)
  return products[n]
 
 def MaxProductAfterCut2(self, n):
  # 贪婪算法
  if n < 2:
   return 0
  if n==2:
   return 1
  if n==3:
   return 2
  timesOf3 = n//3
  if n - timesOf3*3 == 1:
   timesOf3 -= 1
  
  timesOf2 = (n - timesOf3 * 3)//2
  return (3**timesOf3) * (2**timesOf2)
 
 
 
if __name__=="__main__":
 print(Solution().MaxProductAfterCut(8))
 print(Solution().MaxProductAfterCut(10))
 #print(Solution().NumberOf1(0))
 print(Solution().MaxProductAfterCut2(8))
 print(Solution().MaxProductAfterCut2(10))

解题思路二:基于动态规划和贪婪算法。

class Solution:
 # 动态规划
 def maxCut(self, n):
  if n<2:  return 0
  if n==2: return 1
  if n==3: return 2
  res=[0]*(n+1)
  res[0], res[1], res[2], res[3]=0, 1, 2, 3
  for i in range(4, n+1):
   max = 0
   for j in range(1, i//2+1):
    temp = res[j]*res[i-j]
    if temp>max:
     max = temp
   res[i]=max # 由下而上
  return res[n]
 # 贪婪算法
 def cutRope(length):
  if length<2: return 0
  if length==2: return 1
  if length==3: return 2
  timesOf3 = length // 3 # 尽可能剪出3
  if length-timesOf3*3 == 1: # 如果最后余1,则留一段4分成两半
   timesOf3 -= 1
  timesOf2 = (length-timesOf3*3) // 2
  return (3**timesOf3) * (2**timesOf2)

到此这篇关于Python 剪绳子的多种思路实现(动态规划和贪心)的文章就介绍到这了,更多相关Python 剪绳子内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python统计字符串中指定字符出现次数的方法
Apr 04 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
python使用turtle绘制分形树
Jun 22 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
基于python实现高速视频传输程序
May 05 Python
Python对接支付宝支付自实现功能
Oct 10 Python
通过实例解析Python return运行原理
Mar 04 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Python 列表推导式需要注意的地方
Oct 23 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 #Python
关于多元线性回归分析——Python&amp;SPSS
Feb 24 #Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 #Python
sklearn+python:线性回归案例
Feb 24 #Python
深入理解Tensorflow中的masking和padding
Feb 24 #Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 #Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 #Python
You might like
乱谈我对耳机、音箱的感受
2021/03/02 无线电
PHP实现从远程下载文件的方法
2015/03/12 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
Mootools 1.2教程 类(一)
2009/09/15 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
js微信支付实现代码
2016/12/22 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
Python导入模块时遇到的错误分析
2017/08/30 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
呐喊读书笔记
2015/06/30 职场文书
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js