【LEETCODE】75、第1248题 统计「优美子数组」

package array.medium;

/**
 * @Auther: xiaof
 * @Date: 2020/4/21 10:48
 * @Description:1248. 统计「优美子数组」
 * 给你一个整数数组 nums 和一个整数 k。
 * 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。
 * 请返回这个数组中「优美子数组」的数目。
 * 示例 1:
 * 输入:nums = [1,1,2,1,1], k = 3
 * 输出:2
 * 解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。
 * 示例 2:
 * 输入:nums = [2,4,6], k = 1
 * 输出:0
 * 解释:数列中不包含任何奇数,所以不存在优美子数组。
 * 示例 3:
 * 输入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
 * 输出:16
 * 提示:
 *
 * 1 https://leetcode-cn.com/problems/count-number-of-nice-subarrays
 * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 */
public class NumberOfSubarrays {

    public int solution(int[] nums, int k) {
        int i = 0, j = 0, ki = 0, res = 0;
        while (i < nums.length && j < nums.length) {
            //判断范围,判断窗口边缘是否是瞒住条件
            if (isOdd(nums[j])) {
                //如果j是奇数
                ki++;
            }
            //判断窗口是否瞒住k个,并对窗口进行改变,要保证恰好有K个,多了少了都不行
            while ((j - i + 1) >= k && ki == k) {
                res++;
                //如果瞒住了,那么从当前j到这个串的后续所有偶数都是符合的
                for (int x = j + 1; x < nums.length; ++x) {
                    if (!isOdd(nums[x])) {
                        res++;
                    } else break;
                }
//                res++;
                //然后判断前面的窗口进行递增
                if (isOdd(nums[i])) {
                    ki--;
                }
                i++;
            }
            ++j;
        }
        //去掉全集
        return res;
    }

    private boolean isOdd(int n) {
        //判断是否是奇数
        if ((n & 1) == 0) {
            return false;
        } else {
            return true;
        }
    }

    public int numberOfSubarrays(int[] nums, int k) {
        if (nums == null || nums.length == 0 || nums.length < k) return 0;
        // 双指针
        int left = 0, right = 0;
        int count = 0; // 连续子数组中奇数的个数
        int res = 0;
        int preEven = 0; // 记录第一个奇数前面的偶数个数
        while (right < nums.length){
            // 连续子数组中奇数个数不够
            if (count < k){
                if (nums[right] % 2 != 0) count++;
                right++; // 移动右侧指针
            }
            // 连续子数组中奇数个数够了,看第一个奇数前面有多少个偶数
            if (count == k) {
                preEven = 0;
                while (count == k){
                    res++;
                    if (nums[left] % 2 != 0) count--;
                    left++;
                    preEven++;
                }
            } else res += preEven; // 每次遇到 right 为偶数的时候就进行累加 相当于区间前面偶数个数 * 后面偶数个数
        }
        return res;
    }

    public static void main(String[] args) {
        NumberOfSubarrays fuc = new NumberOfSubarrays();
        int nums1[] = {2,2,2,1,2,2,1,2,2,2}, k1 = 2;
        int nums2[] = {1,1,2,1,1}, k2 = 3;
        int nums3[] = {45627,50891,94884,11286,35337,46414,62029,20247,72789,89158,54203,79628,25920,16832,47469,80909}, k3 = 1;

        fuc.solution(nums3, k3);
//        fuc.numberOfSubarrays(nums2, k2);
    }
}

Original: https://www.cnblogs.com/cutter-point/p/12743677.html
Author: cutter_point
Title: 【LEETCODE】75、第1248题 统计「优美子数组」

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713214/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Ribbon

    Ribbon—-客户端负载均衡器 一.为什么要使用Ribbon? 如果有多个相同的服务注册到Eureka中,服务消费者应该选择哪个服务器就成了一个问题。这里很明显也是一…

    技术杂谈 2023年7月25日
    079
  • 子串次数——类似KMP

    老规矩 先来看问题 字符串a 在A中出现了多少次 求次数 。 当然有很多种算法 最简单的 一个一个找呗 不过这种太麻烦 我们不讲这种 我在写这个算法的时候 用到了KMP算法的部分内…

    技术杂谈 2023年7月23日
    091
  • 设计模式——创建型设计模式

    创建型设计模式 争对 &#x5BF9;&#x8C61;/&#x7C7B;创建时的优化 工厂方法模式(了解) 通过定义顶层抽象工厂类,通过继承的方式,针对于每…

    技术杂谈 2023年7月11日
    088
  • WIN10平板 如何修改网络IP地址为固定

    右击网络,属性,更改适配器设置,然后可以找到当前的无线网络 然后依次点开即可修改IP地址 本文为博主原创文章,未经博主允许不得转载。 Original: https://www.c…

    技术杂谈 2023年5月31日
    0120
  • 中断均衡脚本

    中断均衡脚本 来源 https://www.right.com.cn/forum/thread-4041282-1-1.html 基于OpenWrt 19.07分支,添加杂七杂八的…

    技术杂谈 2023年5月31日
    0122
  • ftp的passive模式

    ftp的passive模式 今天在一台测试服务器上搭建ftp,折腾了许久。 主要是不了解ftp的passive模式和port模式的区别。这里记录一下。 和passive模式对应的叫…

    技术杂谈 2023年6月1日
    0113
  • 开源漏洞扫描器合集

    =========================================== =========================================== 分布…

    技术杂谈 2023年5月31日
    088
  • 千古前端图文教程-HTML001-认识Web和Web标准

    认识Web和Web标准 认识Web和Web标准 Web、网页、浏览器 Web 网页 浏览器 Web标准 W3C组织 Web标准 Web、网页、浏览器 Web Web(World W…

    技术杂谈 2023年7月11日
    0107
  • [转载]100大最佳古怪网站

    【网站名称】:眼睛的幻觉 【网站简介】:在这里你可以体验各种”空间频率扭曲”,实际上那只是”你的眼睛背叛了你的心”而已 【网站名称】…

    技术杂谈 2023年7月24日
    0100
  • 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)

    以百度为例,API返回的是JSONP数据,JSONP是跨域访问的一种方式。由于服务器返回的JavaScript代码可以直接引用,通过回调函数的方式就可以间接的获取服务器的数据。 下…

    技术杂谈 2023年5月31日
    093
  • wordpress说明

    ea.zhoujingen.cn 网站备注 BackWPup备份插件,需要时启动插件备份,否则导致网站打开Waiting(TTFB)增加1秒 Original: https://w…

    技术杂谈 2023年5月31日
    0125
  • SVN还原项目到某一版本

    将本地的项目通过SVN还原到某一版本,并将SVN服务器上的项目也还原到这一版本 第一步:新建一个文件夹,如test,选中test右键-checkout到最新版本 第二步:选中tes…

    技术杂谈 2023年5月31日
    090
  • Flink 状态编程

    在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一 Flink优势: 支持高吞吐、低延迟、高性能 支持事件时间Event_time概念 支持有状态计算 有状态计…

    技术杂谈 2023年7月10日
    085
  • 推荐 10 本 Go 经典书籍,从入门到进阶(含下载方式)

    书单一共包含 10 本书,分为入门 5 本,进阶 5 本。我读过其中 7 本,另外 3 本虽然没读过,但也是网上推荐比较多的。 虽然分了入门和进阶,但是很多书中这两部分内容是都包含…

    技术杂谈 2023年6月21日
    0141
  • JSON_语法_值得获取

    JSON_语法_值得获取 json对象.键名 json对象[“键名”] 数据对象[索引] 获取值: Title //定义基本格式 var person = …

    技术杂谈 2023年6月21日
    090
  • 鸟类飞行状态下穿戴式神经信号与行为数据检测记录系统的技术难点总结

    前记 近来受国内一些科研院所的委托,帮忙开发了一款鸟类可穿戴神经信号和行为数据分析设备。项目虽然成功了。可中间也遇到不少值得记录和反思的问题。 作为一家智能可穿戴方案提供商,对这方…

    技术杂谈 2023年5月31日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球