2023-8-5
- 题1
- 体会
- 我的代码
- 题2
- 体会
- 我的代码
题1
体会
一开始是觉得这道题是贪心的,选出现次数最多的元素,但是发现,当有多个元素出现次数均为最多时,似乎很难处理,就放弃了。转而问ChatGPT ,结果让自己走上了考虑动态规划的不归路。
就是贪心,就是贪心,就是贪心。
还是编程能力不足。
(上面说复制数组,其实只要头元素复制到最后,尾元素复制到最前,也行)
class Solution:
def minimumSeconds(self, nums: List[int]) -> int:
pos = defaultdict(list)
n = len(nums)
for i in range(2 * n):
pos[nums[i % n]].append(i)
ans = inf
for x in pos.values():
v = 0
for i in range(len(x)-1):
v = max(v, (x[i+1] - x[i]) // 2)
ans = min(ans, v)
return ans
我的代码
题2
体会
这道题当时大概看了一眼,觉得没思路就放弃了。
同样,最后对操作次数进行枚举,找出第一次满足条件的次数,返回答案即可。
我的代码
class Solution:
def minimumTime(self, nums1: List[int], nums2: List[int], x: int) -> int:
v1 = sum(nums1)
v2 = sum(nums2)
n = len(nums1)
sorted_range = sorted(range(n), key=lambda x: nums2[x])
dp = [-inf] * (n + 1)
dp[0] = 0
for i in sorted_range:
for j in range(n, 0, -1):
dp[j] = max(dp[j], dp[j-1] + nums1[i] + nums2[i] * j)
for i in range(n + 1):
if v1 + v2 * i - dp[i] <= x:
return i
return -1