2024:考试的最大困扰度

This commit is contained in:
轩辕龙儿 2022-03-29 23:29:19 +08:00
parent cec0612146
commit 745458bbdd
2 changed files with 145 additions and 0 deletions

View File

@ -0,0 +1,93 @@
//一位老师正在出一场由 n 道判断题构成的考试每道题的答案为 true 'T' 表示或者 false 'F' 表示老师想增加学生对自己做出
//答案的不确定性方法是 最大化 连续相同 结果的题数也就是连续出现 true 或者连续出现 false
//
// 给你一个字符串 answerKey 其中 answerKey[i] 是第 i 个问题的正确结果除此以外还给你一个整数 k 表示你能进行以下操作的最
//多次数
//
//
// 每次操作中将问题的正确答案改为 'T' 或者 'F' 也就是将 answerKey[i] 改为 'T' 或者 'F'
//
//
// 请你返回在不超过 k 次操作的情况下最大 连续 'T' 或者 'F' 的数目
//
//
//
// 示例 1
//
//
//输入answerKey = "TTFF", k = 2
//输出4
//解释我们可以将两个 'F' 都变为 'T' 得到 answerKey = "TTTT"
//总共有四个连续的 'T'
//
//
// 示例 2
//
//
//输入answerKey = "TFFT", k = 1
//输出3
//解释我们可以将最前面的 'T' 换成 'F' 得到 answerKey = "FFFT"
//或者我们可以将第二个 'T' 换成 'F' 得到 answerKey = "TFFF"
//两种情况下都有三个连续的 'F'
//
//
// 示例 3
//
//
//输入answerKey = "TTFTTFTT", k = 1
//输出5
//解释我们可以将第一个 'F' 换成 'T' 得到 answerKey = "TTTTTFTT"
//或者我们可以将第二个 'F' 换成 'T' 得到 answerKey = "TTFTTTTT"
//两种情况下都有五个连续的 'T'
//
//
//
//
// 提示
//
//
// n == answerKey.length
// 1 <= n <= 5 * 10
// answerKey[i] 要么是 'T' 要么是 'F'
// 1 <= k <= n
//
// Related Topics 字符串 二分查找 前缀和 滑动窗口 👍 155 👎 0
package leetcode.editor.cn;
//2024:考试的最大困扰度
public class MaximizeTheConfusionOfAnExam {
public static void main(String[] args) {
Solution solution = new MaximizeTheConfusionOfAnExam().new Solution();
solution.maxConsecutiveAnswers("TTFF", 2);
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
String s;
int n, k;
public int maxConsecutiveAnswers(String answerKey, int _k) {
s = answerKey;
n = s.length();
k = _k;
return Math.max(getCnt('T'), getCnt('F'));
}
int getCnt(char c) {
int ans = 0;
for (int i = 0, j = 0, cnt = 0; i < n; i++) {
if (s.charAt(i) == c) cnt++;
while (cnt > k) {
if (s.charAt(j) == c) cnt--;
j++;
}
ans = Math.max(ans, i - j + 1);
}
return ans;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,52 @@
<p>一位老师正在出一场由 <code>n</code>&nbsp;道判断题构成的考试,每道题的答案为 true (用 <code><span style="">'T'</span></code> 表示)或者 false (用 <code>'F'</code>&nbsp;表示)。老师想增加学生对自己做出答案的不确定性,方法是&nbsp;<strong>最大化&nbsp;</strong><strong>连续相同</strong>&nbsp;结果的题数。(也就是连续出现 true 或者连续出现 false</p>
<p>给你一个字符串&nbsp;<code>answerKey</code>&nbsp;,其中&nbsp;<code>answerKey[i]</code>&nbsp;是第 <code>i</code>&nbsp;个问题的正确结果。除此以外,还给你一个整数 <code>k</code>&nbsp;,表示你能进行以下操作的最多次数:</p>
<ul>
<li>每次操作中,将问题的正确答案改为&nbsp;<code>'T'</code> 或者&nbsp;<code>'F'</code>&nbsp;(也就是将 <code>answerKey[i]</code> 改为&nbsp;<code>'T'</code>&nbsp;或者&nbsp;<code>'F'</code>&nbsp;)。</li>
</ul>
<p>请你返回在不超过 <code>k</code>&nbsp;次操作的情况下,<strong>最大</strong>&nbsp;连续 <code>'T'</code>&nbsp;或者 <code>'F'</code>&nbsp;的数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>answerKey = "TTFF", k = 2
<b>输出:</b>4
<b>解释:</b>我们可以将两个 'F' 都变为 'T' ,得到 answerKey = "<em><strong>TTTT</strong></em>" 。
总共有四个连续的 'T' 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>answerKey = "TFFT", k = 1
<b>输出:</b>3
<b>解释:</b>我们可以将最前面的 'T' 换成 'F' ,得到 answerKey = "<em><strong>FFF</strong></em>T" 。
或者,我们可以将第二个 'T' 换成 'F' ,得到 answerKey = "T<em><strong>FFF</strong></em>" 。
两种情况下,都有三个连续的 'F' 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<b>输入:</b>answerKey = "TTFTTFTT", k = 1
<b>输出:</b>5
<b>解释:</b>我们可以将第一个 'F' 换成 'T' ,得到 answerKey = "<em><strong>TTTTT</strong></em>FTT" 。
或者我们可以将第二个 'F' 换成 'T' ,得到 answerKey = "TTF<em><strong>TTTTT</strong></em>" 。
两种情况下,都有五个连续的 'T' 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == answerKey.length</code></li>
<li><code>1 &lt;= n &lt;= 5 * 10<sup>4</sup></code></li>
<li><code>answerKey[i]</code>&nbsp;要么是&nbsp;<code>'T'</code> ,要么是&nbsp;<code>'F'</code></li>
<li><code>1 &lt;= k &lt;= n</code></li>
</ul>
<div><div>Related Topics</div><div><li>字符串</li><li>二分查找</li><li>前缀和</li><li>滑动窗口</li></div></div><br><div><li>👍 155</li><li>👎 0</li></div>