题目
给定一个二进制数组
nums和一个整数k,如果可以翻转最多k个0,则返回 数组中连续1的最大个数 。
分析
\1. 最大子串 =》 动态滑动窗口
\2. 可以最多翻转k个0 =》 使用map 来收集0 和1
解法:滑动窗口
思路
1. 数组中连续 1 的最大个数
1. 最大子串 =》 动态滑动窗口 => 满足条件 left++
2. 可以最多翻转k个0 =》 当 i-j+1-map[1]>k的时候需要左收敛
3. 最大个数=》 不断更新max
*/
// @lc code=start
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var longestOnes = function (nums, k) {
// 初始化Map
const map = {
1: 0,
0: 0,
};
let max = 0;
// 左指针
let j = 0;
for (let i = 0; i < nums.length; i++) {
map[nums[i]]++;
while (i - j + 1 - map[1] > k) {
map[nums[j]]--;
j++;
}
max = Math.max(max, i - j + 1);
}
return max;
};
//时间复杂度:O(n)
//空间复杂度:O(1)
总结
今天这道题是主要是练习如何使用 动态的滑动窗口 来求最大连续子字符串的题目
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com
\