当前位置: 首页 > news >正文

每日一道leetcode(补充版)

1004. 最大连续1的个数 III - 力扣(LeetCode)

题目

给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。

示例 1:

输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。

示例 2:

输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

提示:

  • 1 <= nums.length <= 105
  • nums[i] 不是 0 就是 1
  • 0 <= k <= nums.length

思路

  1. 首先定义两个指针,右指针先将可翻转数拉满,找到作为初始的滑动窗口。
  2. 然后没遇到下一个需要翻转的,先统计窗口长度,再将左指针一直后移到窗口内第一个待翻转点后,然后窗口继续后移,直到窗口到达下一个待翻转点或到达数组末尾,最后输出最长窗口长度即可。
  3. 最后补充考虑指针的情况将细节完善即可:
    1. 左右指针在同一个位置;
    2. 右指针在后;
    3. k是否等于0。
    4. 两个指针指向的地方是否都是0.
  4. 将以上几个情况都组合搭配实现窗口移动逻辑。

代码实现

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int left = 0, right = 0, max_length = 0;while(1) {if(right==nums.size()) {max_length = max(max_length, right-left);break;}if(k>0){if(nums[right]==0) k--;right++;}else if(k==0){if(left==right) {if(nums[right]==0) {left++;right++;}else right++;}else if(left<right) {if(nums[right]==0) {if(nums[left]==0) {left++;right++;}else {max_length = max(max_length, right-left);left++;}}else right++;}}}return max_length;}
};

复杂度分析

  • 时间复杂度:双指针移动,右指针遍历一次完整数组,时间复杂度为O(n)。
  • 空间复杂度:O(1)。

官方题解

  • 官方题解还介绍了个二分查找法,感觉不容易想到,而且效率也不如滑动窗口,就不看了。
http://www.xdnf.cn/news/54181.html

相关文章:

  • 具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解
  • acwing--动态规划【线性dp】4/20、4/21
  • 网页的URL绝对路径和相对路径,以及各自的使用场景
  • 【Vulkan 入门系列】创建逻辑设备和图形、呈现队列,显示尺寸更改(三)
  • 错误: 找不到或无法加载主类 HelloWorld,cmd窗口,java命令,提示
  • PT站中的tracker
  • LangChain4j语言模型选型指南:主流模型能力全景对比
  • 生成式AI对话中提示词策略:明确问题、明确目标和提供背景信息是最有效的策略
  • 【CPU】中断即时性
  • leetcode(01)森林中的兔子
  • 机器学习(神经网络基础篇)——个人理解篇6(概念+代码)———参数优化篇
  • 模型上下文协议(MCP)详解
  • 【物理学】物理学——电机控制中常用的定则
  • AI 中的 CoT 是什么?一文详解思维链
  • select、poll、epoll实现多路复用IO并对比差异
  • C++类继承关键点总结
  • 模拟实现strcmp,strcpy,strlen,strcat,strstr
  • 类转换与强制类型转换详解
  • 双目视觉中的动态畸变矫正与跨视角信息融合
  • SmolVLM2: The Smollest Video Model Ever(五)
  • C与C++的区别
  • 656SJBH重金属音乐点歌系统
  • windows拷贝文件脚本
  • Java编程基础(第二篇:类的基本创建)
  • 基于尚硅谷FreeRTOS视频笔记——16—FreeRTOS的任务创建和删除
  • 电源芯片的关键性能指标与分析
  • netty中对TLS支持详解
  • 状态管理最佳实践:GetX框架深度应用
  • Tradingview日内交易策略分享-89%日内交易胜率
  • 【网工第6版】第4章 无线通信网