本文主要是介绍第165场周赛实录(数学题+动态规划-未完成),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 不浪费原料的汉堡制作方案(数学题)
- 2. 统计全为 1 的正方形子矩阵(动态规划)
- 3. 分割回文串 III(动态规划)
1. 不浪费原料的汉堡制作方案(数学题)
难度:中等
圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。
给你两个整数 tomatoSlices 和 cheeseSlices,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:
- 巨无霸汉堡:4 片番茄和 1 片奶酪
- 小皇堡:2 片番茄和 1 片奶酪
请你以 [total_jumbo, total_small]([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量都是 0。
如果无法使剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量为 0,就请返回 []。
示例 1:
输入:tomatoSlices = 16, cheeseSlices = 7
输出:[1,6]
解释:制作 1 个巨无霸汉堡和 6 个小皇堡需要 41 + 26 = 16 片番茄和 1 + 6 = 7 片奶酪。不会剩下原料。
示例 2:
输入:tomatoSlices = 17, cheeseSlices = 4
输出:[]
解释:只制作小皇堡和巨无霸汉堡无法用光全部原料。
示例 3:
输入:tomatoSlices = 4, cheeseSlices = 17
输出:[]
解释:制作 1 个巨无霸汉堡会剩下 16 片奶酪,制作 2 个小皇堡会剩下 15 片奶酪。
示例 4:
输入:tomatoSlices = 0, cheeseSlices = 0
输出:[0,0]
示例 5:
输入:tomatoSlices = 2, cheeseSlices = 1
输出:[0,1]
提示:
- 0 <= tomatoSlices <= 10^7
- 0 <= cheeseSlices <= 10^7
解决方案:
class Solution:def numOfBurgers(self, tomatoSlices: int, cheeseSlices: int) -> List[int]:res = []if tomatoSlices%2 != 0:return resx = tomatoSlices//2 - cheeseSlicesy = 2 * cheeseSlices - tomatoSlices//2if x < 0 or y < 0:return resres.append(x)res.append(y)return res
执行用时 | 内存消耗 | 语言 |
---|---|---|
64 ms | 13.7 MB | Python3 |
2. 统计全为 1 的正方形子矩阵(动态规划)
难度:中等
给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。
示例 1:
输入:matrix =
[
[0,1,1,1],
[1,1,1,1],
[0,1,1,1]
]
输出:15
解释:
边长为 1 的正方形有 10 个。
边长为 2 的正方形有 4 个。
边长为 3 的正方形有 1 个。
正方形的总数 = 10 + 4 + 1 = 15.
示例 2:
输入:matrix =
[
[1,0,1],
[1,1,0],
[1,1,0]
]
输出:7
解释:
边长为 1 的正方形有 6 个。
边长为 2 的正方形有 1 个。
正方形的总数 = 6 + 1 = 7.
提示:
- 1 <= arr.length <= 300
- 1 <= arr[0].length <= 300
- 0 <= arr[i][j] <= 1
解决方案:
class Solution:def countSquares(self, matrix: List[List[int]]) -> int:n=len(matrix)m=len(matrix[0])ans=0for i in range(0,m):ans+=matrix[0][i]for i in range(1,n):ans+=matrix[i][0]for i in range(1,n):for j in range(1,m):if matrix[i][j]:matrix[i][j]=min(matrix[i-1][j-1],matrix[i][j-1],matrix[i-1][j])+1ans+=matrix[i][j] return ans
执行用时 | 内存消耗 | 语言 |
---|---|---|
864 ms | 16 MB | Python3 |
3. 分割回文串 III(动态规划)
难度:困难
给你一个由小写字母组成的字符串 s,和一个整数 k。
请你按下面的要求分割字符串:
- 首先,你可以将 s 中的部分字符修改为其他的小写英文字母。
- 接着,你需要把 s 分割成 k 个非空且不相交的子串,并且每个子串都是回文串。
请返回以这种方式分割字符串所需修改的最少字符数。
示例 1:
输入:s = “abc”, k = 2
输出:1
解释:你可以把字符串分割成 “ab” 和 “c”,并修改 “ab” 中的 1 个字符,将它变成回文串。
示例 2:
输入:s = “aabbc”, k = 3
输出:0
解释:你可以把字符串分割成 “aa”、“bb” 和 “c”,它们都是回文串。
示例 3:
输入:s = “leetcode”, k = 8
输出:0
提示:
- 1 <= k <= s.length <= 100
- s 中只含有小写英文字母。
解决方案(来自网友):
class Solution:def palindromePartition(self, s: str, k: int) -> int:n=len(s)cost=[[0]*n for _ in range(n)]t=0 for t in range(1,n):for i in range(0,n-t):j=i+tcost[i][j]=cost[i+1][j-1]+(s[i]!=s[j])dp=[[0]*k for _ in range(n)]for i in range(n):dp[i][0]=cost[0][i]for i in range(0,n):for j in range(1,k):m=float("inf")for l in range(j-2,i):m=min(m,cost[l+1][i]+dp[l][j-1])dp[i][j]=mreturn dp[-1][-1]
这篇关于第165场周赛实录(数学题+动态规划-未完成)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!