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