首页 > 其他分享 >滑动窗口系列(定长滑动窗口长度) 8/30

滑动窗口系列(定长滑动窗口长度) 8/30

时间:2024-08-31 13:24:21浏览次数:5  
标签:right 窗口 nums int res 30 ++ 滑动 left

1.所有数对中 数位差之和()

题意:

给定一个nums数组,计算中所有整数数对中 数位差的个数之和;

数位差:某一位上的数字不一样就记作数位差。

eg:12 22; 十位上不一样,数位差为1

思路:

首先计算出一个数字有多少位(题目中给出所有数字的位数都相同这个条件)

然后统计每一位上0-9的个数

最后就可以计算出数位差的个数。

比如说:个位等于0有x个,那么不等于0就有nums.size - x 个,那么数位差就有x*(nums.size-x)/2个

以此类推先计算个位上的。然后计算十位上的...

代码:
class Solution {
    public long sumDigitDifferences(int[] nums) {
        //nums中整数都有相同的长度
        long res=0;
        int size=nums.length;
        int[][] cnt=new int[Integer.toString(nums[0]).length()][10];
        for(int num:nums){
            int index=0;
            while(num>0){
                cnt[index++][num%10]++;
                num/=10;
            }
        }
        for(int i=0;i<cnt.length;i++){
            for(int j=0;j<10;j++){
                res+=(long)cnt[i][j]*(size-cnt[i][j]);
            }
        }
        return res>>1;
    }
}

2.定长子串中原因的最大数目

给你字符串 s 和整数 k 。

请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

英文中的 元音字母 为(aeiou)。

思路:

1.对字符串中的字符循环,判断是不是元音字母;如果是的话,元音字母数量+1;

2.此时判断滑动窗口的长度是否等于k

   2.1 如果等于 就要判断s.charAt(left)是否是元音字母 如果是的话 数量-1;

   2.2  如果小于 继续循环

3.right++,窗口继续往右扩展

代码:
class Solution {
    public int maxVowels(String s, int k) {
        int left = 0;
        int right = 0;
        int res = 0;
        int amount = 0;
        while (right < s.length()) {
            char ch = s.charAt(right);
            if (isYy(ch)) amount++;
            if (right - left + 1 == k) {
                res = Math.max(res, amount);
                if (isYy(s.charAt(left)))
                    amount -= 1;
                left++;
            }
            right++;
        }
        return res;
    }

    public boolean isYy(char ch) {
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
            return true;
        return false;
    }
}

3.大小为K且平均值大于等于阈值的子数组数目

给你一个整数数组 arr 和两个整数 k 和 threshold 。

请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。

思路:

对数组遍历循环,当窗口的长度==k的时候,判断平均值是否大于等于阈值,如果大于等于res++;然后left++,num-=nums[left]

代码:
class Solution {
    public int numOfSubarrays(int[] arr, int k, int threshold) {
        int res = 0;
        int left = 0;
        int right = 0;
        int sum = 0;
        while (right < arr.length) {
            sum += arr[right];
            if (right - left + 1 == k) {
                if (sum >= threshold * k) {
                    res++;
                }
                sum -= arr[left];
                left++;
            }
            right++;
        }
        return res;
    }
}

4.拆炸弹

题意:

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。

如果k>0,数组中下标为index的值为后k位数字(>nums.length-1就返前来)的和;

如果k=0,数组中的值都为0;

如果k<0,数组中下标为index的值为前k位数字(<0折后去)的和

思路:

仍然使用固定长度的滑动窗口的思路;

首先对K进行判断,有三种情况;

k>0,开始进行循环遍历数组中的每一个数字,当right-left+1==k或者right+len-left+1==k的时候,res[(left-1)%k]==sum,循环的条件为index<nums.length+k-1(要使数组上每一个位置都有新的和)

k<0,同理

代码:
class Solution {
    public int[] decrypt(int[] code, int k) {
        int[] res=new int[code.length];
        int len=code.length;
        int left=0;
        int right=0;
        int sum=0;
        int index=0;
        if(k==0)return res;
        else if(k>0){
            while(index<code.length+k-1){
                sum+=code[right];
                System.out.println(sum);
                if(right-left+1==k||right+len-left+1==k){
                    res[(left-1+len)%len]=sum;
                    sum-=code[left%len];
                    left=(left+1)%len;
                }
                right=(right+1)%len;
                index++;
            }
        }else{
            k=-k;
            while(index<code.length+k-1){
                sum+=code[right];
                System.out.println(sum);
                if(right-left+1==k||right+len-left+1==k){
                    res[(right+1)%len]=sum;
                    sum-=code[left];
                    left=(left+1)%len;
                }
                right=(right+1)%len;
                index++;
            }
        }
        return res;
    }
}

模版:

class Solution {
    public int numOfSubarrays(int[] arr, int k, int threshold) {
        int res = 0;
        int left = 0;
        int right = 0;
        int sum = 0;
        while (right < arr.length) {
            //1. 根据题目中的要求来计算
            xxxxxxxx
            //2. 此时判断窗口的大小是否等于题目中要求的
            if (right - left + 1 == 窗口长度大小) {
                if (条件) {
                    res++;
                }
            //3.窗口左边的边界移动
                sum -= arr[left];
                left++;
            }
            //4. 窗口右边的边界移动
            right++;
        }
        return res;
    }
}

标签:right,窗口,nums,int,res,30,++,滑动,left
From: https://blog.csdn.net/2301_78191305/article/details/141719872

相关文章

  • 【秋招笔试】8.30饿了么秋招(算法岗)-三语言题解
    ......
  • 2024.8.30 总结(集训 考 DP)
    上午三个多小时考四道题的DP。赛时会的分:[100](?)+100+[30](?)+100。估分:100+100+0+100。实际分:10+100+0+100。挂巨量的分,挂了120分。下面是一些值得注意的点:T1就是分组背包。DP数组下标要考虑负数可以直接全体加一个值变成非负的,[或者用map之类的](?)(&不......
  • 2024/08/30 每日一题
    LeetCode3153所有数对中数位差之和方法1:模拟classSolution{publiclongsumDigitDifferences(int[]nums){intn=nums.length;longans=0;while(nums[0]>0){//遍历每一位inttol=0;//统计总个数i......
  • 工作随意总结20240830
    最近被裁换工作了,面试过了一个测开岗位,正好趁着入职前的空闲时间,总结一下过去工作中的经历,想到哪写到哪吧,定期总结很重要。工作主要在一家ToB云服务厂商从事测试工作,工作内容主要涵盖了功能、自动化、渗透、性能等方方面面,覆盖到面很广,单一某方面来说深度上就有一些欠缺......
  • 代码随想录算法训练营,8月30日 | 203.移除链表元素, 707.设计链表, 206.反转链表
    链表理论基础1.单链表:数据域和指针域(指向下一个结点的位置)组成,头结点,结尾为空指针;双链表:多了一个指向前一个结点的指针;循环链表:结尾指向头结点。2.链表在内存中的存储不是顺序的,跟数组不同,要找一个数据只能通过前一个数据来找,所有这就导致链表的查询比数组麻烦,但是插入删除数据......
  • 2024-08-30 error [email protected]: The engine "node" is incompatible with this m
    删掉依赖,使用yarn重新拉取,保错如下:[email protected]:Theengine"node"isincompatiblewiththismodule.Expectedversion">=18".Got"16.19.1" 错误[email protected]:引擎“节点”与此模块不兼容。预期版本“>=18”。得到“16.19.1”意思就是yarn拉取依赖过程中......
  • 基于SSM的公交车客流自动调整系统的设计与实现 毕业设计-附源码03009
    摘要随着城市公共交通需求的日益增长,公交车客流量的自动调整成为提升公交服务质量和运营效率的关键。本文提出了一种基于SSM(Spring、SpringMVC、MyBatis)框架的公交车客流自动调整系统的设计与实现方案。该系统通过实时监测公交车客流数据,结合预设的规则和策略,自动调整公交......
  • 人生核心模式的梳理思考 2024-08-30
    2024-08-30    我也是傲娇者剧本。我还有点疑惑,我并没有觉得自己比别人厉害比别人高,也是傲娇者。傲娇者核心是冷漠,冷漠的意思是自己的目标比感受更重要。这样的话我还真是。然后许老师帮梳理了我的模式逻辑。真是清晰透彻。1:我有一些目标,达不成目标我就觉得自己不够好。比......
  • (约230个工具)野兔在线工具箱系统最新版本V4.0.1更新
    野兔在线工具箱系统,采用最新ThinkPHP8框架开发完成,也是基于YETUADMIN开发的工具箱系统,这次野兔在线工具系统更新,更新了几个新的功能模块,和已知的问题,修复系统部分功能。程序开发程序名称:野兔在线工具箱系统程序开发:PHP+MySQL+tp8程序源码:100%开源,支持任意二开,商用程序支持:电脑......
  • P3320 [SDOI2015] 寻宝游戏 与 P10930 异象石 与 CF176E Archaeology
    思路:考虑按照dfn序将关键点的集合排序后为\(a_0,a_1,\cdots,a_k\),则答案为:\[\frac{\sum\limits_{i=0}^k\operatorname{dis}(a_i,a_{(i+1)\bmodk})}{2}\]简单证明一下:需要找出包含一些关键点的最小联通导出子图。则随便以一个关键点为根,对于子树内没有关键点的子树直接......