当前位置: 首页 > wzjs >正文

制作网站升上去福州关键词排名软件

制作网站升上去,福州关键词排名软件,怎做网站,南宁优质手机网站建设公司目录 前言 一、动态规划 1. 爬楼梯 2. 杨辉三角 3. 打家劫舍 4. 完全平方数 5. 零钱兑换 6. 单词拆分 7. 最长递增子序列 8. 乘积最大子数组 9. 分割等和子集 10. 最长有效括号 二、多维动态规划 11. 不同路径 12. 最小路径和 13. 最长回文子串 14. 最长公共子序列 15. 编辑距离…

目录

前言

一、动态规划

1. 爬楼梯

2. 杨辉三角

3. 打家劫舍

4. 完全平方数

5. 零钱兑换

6. 单词拆分

7. 最长递增子序列

8. 乘积最大子数组

9. 分割等和子集

10. 最长有效括号

二、多维动态规划

11. 不同路径

12. 最小路径和

13. 最长回文子串

14. 最长公共子序列

15. 编辑距离


前言

一、动态规划:爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换,单词拆分,最长递增子序列,乘积最大子数组,分割等和子集,最长有效括号。

二、多维动态规划:不同路径,最小路径和,最长回文子串,最长公共子序列,编辑距离。

*** Trick

动态规划步骤:1. 确定初始状态;2. 确定边界条件;3. 确定状态转移方程。

*** 常考:0-1背包问题(对应题目:9、14、15)

class Solution(object):def canPartition(self, nums):# 0-1背包问题sums = sum(nums)if sums % 2 != 0:return Falsetarget = sums // 2n = len(nums)dp = [[False] * (target+1) for _ in range(n)]dp[0][0] = Truefor i in range(1, n):dp[i][0] = Truefor j in range(1, target+1):dp[0][j] = Falsefor i in range(1, n):for j in range(1, target+1):if j >= nums[i]:dp[i][j] = dp[i-1][j] or dp[i-1][j-nums[i]]else:dp[i][j] = dp[i-1][j]return dp[n-1][target]

一、动态规划

1. 爬楼梯

原题链接:70. 爬楼梯 - 力扣(LeetCode)

# 1. 初始状态:爬到第1阶、第2届台阶的方法分别有1、2种
# 2. 确定边界条件
# 3. 动态转移方程:s(n) = s(n-1) + s(n-2)
class Solution(object):def climbStairs(self, n):s = [1, 2]   if n <=2:return s[n-1]else:for i in range(2, n):s.append(s[-1]+s[-2])return s[-1]

2. 杨辉三角

原题链接:118. 杨辉三角 - 力扣(LeetCode)

# 1. 初始状态:dp = [[1] * i for i in range(1, numRows+1)]
# 2. 边界条件:2<=i<numRows, 1<=j<numRows-2
# 3. 动态转移方程:dp[i][j] = dp[i][j-1] + dp[i][j]
class Solution(object):def generate(self, numRows):dp = [[1]*i for i in range(1, numRows+1)]if i<2:return dpfor i in range(2, numRows):for j in range(1, i):dp[i][j] = dp[i-1][j-1] + dp[i-1][j]return dp

3. 打家劫舍

原题链接:198. 打家劫舍 - 力扣(LeetCode)

class Solution(object):def rob(self, nums):nums.insert(0, 0)nums.insert(1, 0)dp = [0 for i in range(len(nums))]for i in range(2, len(nums)):dp[i] = max(dp[i-1], dp[i-2]+nums[i])return dp[-1]

4. 完全平方数

原题链接:279. 完全平方数 - 力扣(LeetCode)

# 1. 初始状态:dp = [i for i in range(n+1)]
# 2. 边界条件: wihle i-j*j >=0
# 3. 动态转移方程:dp[i] = min(dp[i-j*j]+1, dp[i])
class Solution(object):def numSquares(self, n):dp = [i for i in range(n+1)]for i in range(1, n+1):j = 1while i-j*j >= 0:dp[i] = min(dp[i-j*j]+1, dp[i])j+=1return dp[-1]

5. 零钱兑换

原题链接:322. 零钱兑换 - 力扣(LeetCode)

# 1. 初始状态:dp = [float("inf")] * (amount+1)
# 2. 边界条件:i-coin[j] >=0
# 3. 状态方程:dp[i] = min(dp[i-coin[j]] + 1, dp[i]), for j in len(coins)
class Solution(object):def coinChange(self, coins, amount):dp = [float("inf")] * (amount+1)dp[0] = 0for i in range(1, amount+1):for j in range(len(coins)):if i-coins[j] >= 0:dp[i] = min(dp[i-coins[j]] + 1, dp[i])return dp[-1] if dp[-1]!=float("inf") else -1

6. 单词拆分

原题链接:139. 单词拆分 - 力扣(LeetCode)

class Solution(object):def wordBreak(self, s, wordDict):dp = [0] + [False for i in range(1, len(s)+1)]for i in range(len(s)+1):if dp[i] == True:for j in range(i+1, len(s)+1):if s[i:j] in wordDict:dp[j] =  Truereturn dp[-1]

7. 最长递增子序列

原题链接:300. 最长递增子序列 - 力扣(LeetCode)

class Solution(object):def lengthOfLIS(self, nums):dp = [1 for i in range(len(nums))]for i in range(len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[j]+1, dp[i])return max(dp)

8. 乘积最大子数组

原题链接:152. 乘积最大子数组 - 力扣(LeetCode)

class Solution(object):def maxProduct(self, nums):# 初始状态:max_pre = min_pre = num[0]# 状态转移方程:max_pre = max(max_pre*nums[i]), min_pre*nums[i], nums[i])res = nums[0]max_pre = min_pre = nums[0]for i in range(1, len(nums)):max_pre_ = max_pre * nums[i]min_pre_ = min_pre * nums[i]max_pre = max(max_pre_, min_pre_, nums[i])min_pre = min(max_pre_, min_pre_, nums[i])res = max(res, max_pre)return res

9. 分割等和子集

原题链接:416. 分割等和子集 - 力扣(LeetCode)

class Solution(object):def canPartition(self, nums):# 0-1背包问题sums = sum(nums)if sums % 2 != 0:return Falsetarget = sums // 2n = len(nums)dp = [[False] * (target+1) for _ in range(n)]dp[0][0] = Truefor i in range(1, n):dp[i][0] = Truefor j in range(1, target+1):dp[0][j] = Falsefor i in range(1, n):for j in range(1, target+1):if j >= nums[i]:dp[i][j] = dp[i-1][j] or dp[i-1][j-nums[i]]else:dp[i][j] = dp[i-1][j]return dp[n-1][target]

10. 最长有效括号

原题链接:32. 最长有效括号 - 力扣(LeetCode)

class Solution(object):def longestValidParentheses(self, s):stack = [-1]res = 0for i in range(len(s)):if s[i] == '(':stack.append(i)else:stack.pop()if not stack:stack.append(i)else:res = max(res, i-stack[-1])return res

二、多维动态规划

11. 不同路径

原题链接:62. 不同路径 - 力扣(LeetCode)

class Solution(object):def uniquePaths(self, m, n):# 初始状态dp[i][0] = 1, dp[0][j] = 1# 状态转移方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]dp = [[0] * n for _ in range(m)]for i in range(m):dp[i][0] = 1for j in range(n):dp[0][j] = 1for i in range(1, m):for j in range(1, n):dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[-1][-1]

12. 最小路径和

原题链接:64. 最小路径和 - 力扣(LeetCode)

class Solution(object):def minPathSum(self, grid):# dp[i][0] = dp[i-1] + grid[i][0], dp[0][j] = dp[0][j-1] + grid[0][j]# dp[i][j] = min(dp[i-1][j] + grid[i][j], dp[i][j-1]+ grid[i][j])m, n =  len(grid), len(grid[0])dp = [[0] * n for _ in range(m)]dp[0][0] = grid[0][0]for i in range(1, m):dp[i][0] = dp[i-1][0] + grid[i][0]for j in range(1, n):dp[0][j] = dp[0][j-1] + grid[0][j]for i in range(1, m):for j in range(1, n):dp[i][j] = min(dp[i-1][j] + grid[i][j], dp[i][j-1]+ grid[i][j])return dp[-1][-1]

13. 最长回文子串

原题链接:5. 最长回文子串 - 力扣(LeetCode)

class Solution(object):def longestPalindrome(self, s):n = len(s)dp = [[False] * n for _ in range(n)]start, max_len = 0, 0for right in range(n):for left in range(right+1):span = right - left + 1if span == 1:dp[left][right] = Trueelif span == 2:dp[left][right] = s[left] == s[right]else:dp[left][right] = dp[left+1][right-1] and s[left] == s[right]if dp[left][right]:if span > max_len:max_len = spanstart = leftreturn s[start: start+max_len]

14. 最长公共子序列

原题链接:1143. 最长公共子序列 - 力扣(LeetCode)

class Solution(object):def longestCommonSubsequence(self, text1, text2):# 0-1 背包问题# if t1 == t2: dp[i+1][j+1] = dp[i][j] + 1# else: dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1])m, n = len(text1), len(text2)dp = [[0]* (n+1) for _ in range(m+1)]for i, t1 in enumerate(text1):for j, t2 in enumerate(text2):if t1 == t2:dp[i+1][j+1] = dp[i][j] + 1else:dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1])return dp[-1][-1]

15. 编辑距离

原题链接:72. 编辑距离 - 力扣(LeetCode)

class Solution(object):def minDistance(self, word1, word2):# 0-1 背包问题# 动态转移方程:dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1分别对应插入、删除、替换操作"""0 r o s0   0 1 2 3h   1o   2r   3s   4e   5"""m, n = len(word1), len(word2)dp = [[0] * (n+1) for _ in range(m+1)]for i in range(1, m+1):dp[i][0] = ifor j in range(1, n+1):dp[0][j] = jfor i, w1 in enumerate(word1):for j, w2 in enumerate(word2):if w1 == w2:dp[i+1][j+1] = dp[i][j]else:dp[i+1][j+1] = min(dp[i+1][j], dp[i][j+1], dp[i][j]) + 1 return dp[-1][-1]
http://www.dtcms.com/wzjs/487925.html

相关文章:

  • 南京建设局网站首页百度广告太多
  • 网站绑定微信公众号黑科技推广软件
  • 做网站需要租服务器么系统优化app最新版
  • 重庆网站建设与推广北京seo代理商
  • 怎样健网站正规的计算机培训机构
  • 做淘宝有哪些货源网站企业查询网站
  • 做网站的公司都是小公司网站优化推广价格
  • 音乐网站系统源码官网seo是什么意思
  • 网站建设前端和后端网店怎么运营和推广
  • 华为公司网站建设目标公司seo推广营销网站
  • 一站式做网站哪家强app推广赚钱平台
  • 网站建设备案多长时间河南网站seo
  • 电商网站开发费用百度售后服务电话人工
  • 找人做淘宝网站需要多少钱在线网站建设
  • 网站建设公司的转型常用的网络营销工具有哪些
  • 企业宣传如何做网站十大营销策划公司排名
  • 做网站百度收费吗关键词林俊杰
  • 建设网站学什么条件我想做地推怎么找渠道
  • 自己做网站商城需要营业执照吗seo优化官网
  • 山东网站建设公司哪家好青岛seo招聘
  • 美国做科普的网站潍坊疫情最新消息
  • 佛山网站企业seo是搜索引擎优化吗
  • 网站开发流程图解释含义网址注册查询
  • 公司网站建设总结报告销售培训课程一般有哪些
  • 如何快速做网站关键词专业竞价托管哪家好
  • 张店区创业孵化中心有做网站的吗网络营销策略分析方法
  • 浅析动态网站建设之后台数据库的选择广州网站快速排名优化
  • 物流网站的建设论文一万字seo是哪个国家
  • 域名估价网站软文新闻发稿平台
  • 企业网站系统手机版百度指数分是什么