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

【刷题2—滑动窗口】最大连续1的个数lll、将x减到0的最小操作数

目录

  • 一、最大连续1的个数lll
  • 二、将x减到0的最小操作数

一、最大连续1的个数lll

题目:
在这里插入图片描述
思路:
问题转换为:找到一个最长子数组,这个数组里面0的个数不能超过k个

定义一个变量count,来记录0的个数,进窗口、判断、出窗口、更新结果

代码:

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

二、将x减到0的最小操作数

题目:
在这里插入图片描述
思路:
题目要求是移除最右边或者最左边,直接这样操作非常麻烦,可以反过来做。

最右边和最左边的和为x,用一个变量sum统计数组所有的元素之和,sum-x就是剩下区域的元素,这个区域是连续的,可以用滑动窗口。
在这里插入图片描述
要考虑target是负数的情况,如果是负数,直接返回-1,因为数组的每个元素都是整数。

要让操作数的次数最小,就要让等于target的子数组尽可能大,然后用滑动窗口的思路做,返回值为:如果子数组中没有和等于target就返回-1,否则返回数组长度减去len(n-len),得到最小操作数。

代码:

class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        int n = nums.size();
        int sum = 0;
        // 总和
        for (auto e : nums) sum += e;
        int target = sum - x;
        // 负数情况
        if (target < 0) return -1;
        int left = 0, right = 0, len = -1, k = 0;
        while (right < n)
        {
            k += nums[right];
            while (k > target)
            {
                k -= nums[left];
                left++;
            }
            if (k == target)
            {
                len = max(len, right - left + 1);
            }
            ++right;
        }
        return len == -1 ? -1 : n - len;
    }
};

http://www.kler.cn/a/322534.html

相关文章:

  • Ubuntu安装配置MySQL(远程登录)
  • AIGC----生成对抗网络(GAN)如何推动AIGC的发展
  • 【ARM】MDK在debug模式下的Registers窗口包含哪些内容
  • 华为ensp实验二--mux vlan的应用
  • Linux下编译MFEM
  • Vue模块化开发的理解
  • 傅里叶级数在机器人中的应用(动力学参数辨识)
  • ubuntu 设置静态IP
  • FileZilla Server 黑白单移除
  • 基于Spring Boot+Vue的减肥健康管理系统设计和实现【原创】(BMI算法,协同过滤算法、图形化分析)
  • 类和对象(3)
  • spring-boot web + vue
  • RNA-seq通用代码-生物信息学pipeline001
  • Spring MVC参数接收 总结
  • Flutter modal_bottom_sheet 库:介绍与使用指南
  • 如何在CentOS 7上升级KVM内核?
  • 信息安全工程师(22)密码学网络安全应用
  • 一款好用的多种格式电子书制作软件
  • 【编程小白必看】MySQL 日期类型转换与判断操作秘籍一文全掌握
  • Docker torchserve workflow部署流程
  • 【React】JSX基础知识
  • 鸿蒙-app进入最近任务列表触发的监听
  • 均匀合并列表
  • 前端面试题(七)
  • 力扣题解2306
  • 探秘电商平台数据采集:API 接口接入实战演示