LeetCode笔记:Weekly Contest 297
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Weekly Contest 297相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题就是按照题意计算一下累积计税就行了。
2. 代码实现
给出python代码实现如下:
class Solution:
def calculateTax(self, brackets: List[List[int]], income: int) -> float:
pre = 0
tax = 0
for u, p in brackets:
tax += p * (min(u, income) - pre) / 100
pre = u
if pre >= income:
break
return tax
提交代码评测得到:耗时127ms,占用内存13.9MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题就是一个简单的动态规划题目,借用cache基本顺着思路下来就完事了,就不过多赘述了。
2. 代码实现
给出python代码实现如下:
class Solution:
def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:
n, m = len(grid), len(grid[0])
@lru_cache(None)
def dp(i, j):
if i == n-1:
return grid[i][j]
return min(grid[i][j] + moveCost[grid[i][j]][k] + dp(i+1, k) for k in range(m))
return min(dp(0, k) for k in range(m))
提交代码评测得到:耗时2413ms,占用内存20ms。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题我的思路就是不同的遍历加上剪枝。
首先通过深度优先遍历来找出所有的可能组合,然后通过剪枝的方式去除掉所有不可能的组合,从而大幅减小时间复杂度。
2. 代码实现
给出python代码实现如下:
class Solution:
def distributeCookies(self, cookies: List[int], k: int) -> int:
n = len(cookies)
res = math.inf
cnt = [0 for _ in range(k)]
def dfs(idx):
nonlocal res, cnt
if idx == n:
res = min(res, max(cnt))
return
for i in range(k):
if cnt[i] + cookies[idx] >= res:
continue
cnt[i] += cookies[idx]
dfs(idx+1)
cnt[i] -= cookies[idx]
return
dfs(0)
return res
提交代码评测得到:耗时153ms,占用内存13.9MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题很丢脸的没能自己搞定,看了大佬们的解答之后发现这一题其实挺简单的,只需要转换一下思路就行了。
这一题的关键在于说转换一下思路,不是去考察尾部的字符,而是直接考察首字母变换的可能性。
记freq[(u, v)]
表示首字母为u
的单词变成首字母为v
的单词时可行的变换数目。
从而,对任意的freq[(u, v)] * freq[(v, u)]
就可以表示首字母为u
和v
的两个idea之间可行的组合数目。
2. 代码实现
给出python代码实现如下:
class Solution:
def distinctNames(self, ideas: List[str]) -> int:
ideaset = set(ideas)
freq = defaultdict(int)
for idea in ideas:
for ch in string.ascii_lowercase:
change = ch + idea[1:]
if change not in ideaset:
freq[(idea[0], ch)] += 1
res = 0
for u in string.ascii_lowercase:
for v in string.ascii_lowercase:
if u == v:
continue
res += freq[(u, v)] * freq[(v, u)]
return res
提交代码评测得到:耗时4009ms,占用内存28.3MB。
以上是关于LeetCode笔记:Weekly Contest 297的主要内容,如果未能解决你的问题,请参考以下文章