LeetCode笔记:Weekly Contest 329
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Weekly Contest 329相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题就是把数字按照位数进行拆分,然后首位赋值正号,后面依序定一下正负号,然后求和即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def alternateDigitSum(self, n: int) -> int:
res, flag = 0, 1
for digit in str(n):
res += flag * int(digit)
flag *= -1
return res
提交代码评测得到:耗时47ms,占用内存13.9MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题就是根据每一行的第k个元素对每一行的数组进行倒序排列,这个在要自己实现的话还得注意每一行元素变幻的完整性,但是对于像python这种高级语言,基本上就一行代码就是了,倒是没啥好多说的……
2. 代码实现
给出python代码实现如下:
class Solution:
def sortTheStudents(self, score: List[List[int]], k: int) -> List[List[int]]:
return sorted(score, key=lambda x: x[k], reverse=True)
提交代码评测得到:耗时443ms,占用内存20.4MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题考察变换方式有:
00 -> 00
01 -> 11
10 -> 11
11 -> 10
可以看到:
- 0转换为1和1转换为0都是可以实现的,但是前提是必须有另一个1存在。
只要target全为0,那么输入也必须全为0,如果target不全为0,那么只要输入字符串当中不全为0即可转换成功。
2. 代码实现
给出python代码实现如下:
class Solution:
def makeStringsEqual(self, s: str, target: str) -> bool:
cnt = Counter(s)
tgt = Counter(target)
if tgt['1'] == 0:
return cnt['1'] == 0
else:
return cnt['1'] > 0
提交代码评测得到:耗时88ms,占用内存15.1MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题我的思路就是一个动态规划来决定切分点。
2. 代码实现
给出python代码实现如下:
class Solution:
def minCost(self, nums: List[int], k: int) -> int:
n = len(nums)
@lru_cache(None)
def dp(idx):
if idx >= n:
return 0
i = idx
cnt = defaultdict(int)
while i < n and cnt[nums[i]] == 0:
cnt[nums[i]] += 1
i += 1
res, s = k + dp(i), k
for j in range(i, n):
cnt[nums[j]] += 1
if cnt[nums[j]] == 2:
s += 2
elif cnt[nums[j]] > 2:
s += 1
res = min(res, s + dp(j+1))
if s >= res:
break
return res
return dp(0)
提交代码评测得到:耗时5954ms,占用内存16.2MB。
以上是关于LeetCode笔记:Weekly Contest 329的主要内容,如果未能解决你的问题,请参考以下文章