1 、2379.得到K个黑块的最少涂色次数
. - 力扣(LeetCode)
给你一个长度为 n
下标从 0 开始的字符串 blocks
,blocks[i]
要么是 'W'
要么是 'B'
,表示第 i
块的颜色。字符 'W'
和 'B'
分别表示白色和黑色。
给你一个整数 k
,表示想要 连续 黑色块的数目。
每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续 k
个黑色块的 最少 操作次数。
题解
十分基础的滑动窗口题目要计算涂黑的块,其实可以看成k个方块中黑色方块最多的数量
class Solution {public int minimumRecolors(String blocks, int k) {char[] c = blocks.toCharArray();int count = 0;for (int i = 0; i < k; i++) {if (c[i] == 'B')count++;}int ans = count;for (int i = k; i < c.length; i++) {if (c[i] == 'B')count++;if (c[i - k] == 'B')count--;ans = Math.max(ans, count);}return k - ans;}
}
2、 643.子数组最大平均数 1
. - 力扣(LeetCode)
给你一个由 n
个元素组成的整数数组 nums
和一个整数 k
。
请你找出平均数最大且 长度为 k
的连续子数组,并输出该最大平均数。
任何误差小于 10-5
的答案都将被视为正确答案。
题解
求长度为k的窗口中最大和
class Solution {public double findMaxAverage(int[] nums, int k) {double ans = 0, sum = 0;for (int i = 0; i < k; i++){sum += nums[i];} ans = sum / k;for (int i = k; i < nums.length; i++) {sum = sum + nums[i] - nums[i - k]; ans = Math.max(ans, sum / k);}return ans;}
}