186双周赛-①Q1-枚举②Q2-贪心/状态机DP③前缀和优化DP

577 字
3 分钟
186双周赛-①Q1-枚举②Q2-贪心/状态机DP③前缀和优化DP

186双周赛-①Q1-枚举②Q2-贪心/状态机DP③前缀和优化DP#

第 186 场双周赛 - 力扣(LeetCode)

https://www.wolai.com/bffX1CFhNVx9JdE1PHrb8g

Q2-枚举#

题意#

给你一个长度为 n 的整数数组 nums 和一个整数 k 。

如果满足以下条件,则下标对 (i, j) 被称为有效 的:

  • 0 <= i < j < n
  • j - i >= k

返回所有有效对中的 nums[i] + nums[j] 的最大 值。

枚举#

枚举右,维护左,枚举的过程中维护nums[j-k]的最大值

枚举
class Solution:
def maxValidPairSum(self, nums: list[int], k: int) -> int:
ans = -inf
pre = nums[0]
for j in range(k,len(nums)):
pre = max(pre,nums[j - k])
ans = max(ans,pre + nums[j])
return ans
枚举
class Solution {
public:
int maxValidPairSum(vector<int>& nums, int k) {
int ans = 0,mx = 0;
for(int j = k;j < nums.size();j++){
mx = max(mx,nums[j-k]);
ans = max(ans,mx + nums[j]);
}
return ans;
}
};

Q3-贪心/状态机DP#

题意#

给你两个长度同为 n 的二进制字符串 s1 和 s2 。

你可以对 s1以任意顺序执行以下操作任意 次:

  • 选择一个满足 s1[i] 为 '0' 的下标 i ,并将其更改为 '1' 。
  • 选择一个满足 0 <= i < n - 1 且 s1[i] 和 s1[i + 1] 均为 '1' 的下标 i 。将这两个字符都更改为 '0' 。

返回使 s1 等于 s2 所需的最小 操作次数。如果无法使 s1 等于 s2 ,则返回 -1 。

贪心#

灵神题解

贪心
class Solution:
def minOperations(self, s1: str, t: str) -> int:
n = len(s1)
if n == 1 and s1[0] == '1' and t == '0':
return -1
s = list(s1)
ans = 0
for i in range(n):
if s[i] == t[i]:
continue
if s[i] == '0':
ans += 1
elif i < n - 1 and s[i+1] == '1':
ans += 1
s[i+1] = '0'
else:
ans += 2
return ans
贪心
class Solution {
public:
int minOperations(string s, string t) {
int n = s.size();
if (n == 1 && s == "1" && t == "0") {
return -1;
}
int ans = 0;
for (int i = 0; i < n; i++) {
if (s[i] == t[i]) {
continue;
}
if (s[i] == '0') {
ans++;
} else if (i < n - 1 && s[i + 1] == '1') {
ans++;
s[i + 1] = '0';
} else {
ans += 2;
}
}
return ans;
}
};

状态机DP#

状态机DP
class Solution:
def minOperations(self, s1: str, s2: str) -> int:
n = len(s1)
s1 = list(s1)
s2 = list(s2)
if n == 1:
if s1 == s2:
return 0
return 1 if s1[0] == '0' and s2[0] == '1' else -1
d = [int(s2[i]) - int(s1[i]) for i in range(n)]
c2 = [0]*(n - 1)
c2[-1] = max(0,-d[-1])
for i in range(n-3,-1,-1):
c2[i] = max(0,-d[i+1] - c2[i+1])
c2[0] = max(c2[0],-d[0])
return sum(d) + 3 * sum(c2)

Q4-前缀和优化DP#

186双周赛-①Q1-枚举②Q2-贪心/状态机DP③前缀和优化DP
http://blog.7a7a68.xyz/posts/186双周赛-q1-枚举q2-贪心-状态机dp-前缀和优化dp/
作者
Waning
发布于
2026-07-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Waning
愿你明日如绚丽之花.
公告
还活着.
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
56
分类
8
标签
20
总字数
125,693
运行时长
0
最后活动
0 天前

目录