网络知识 娱乐 力扣刷题篇——滑动窗口

力扣刷题篇——滑动窗口

 

 

目录

 1984 题目描述✨:

解题思路✨: 

 代码附上✨:

 2269题目描述✨:

解题思路✨:

1763题目描述✨:

 解题思路✨:

代码附上✨: 


 

 💟💟前言

友友们大家好,我是你们的小王同学😗😗

今天给大家带来的是力扣刷题篇——滑动窗口

希望能给大家带来有用的知识

觉得小王写的不错的话 麻烦动动小手 点赞👍 收藏⭐  评论📄

小王的主页:小王同学🚗

小王的gitee:小王同学🏩

小王的github:小王同学💦

 

 

 1984 题目描述✨:

给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。

从数组中选出任意 k 名学生的分数,使这 k 个分数间 最高分最低分 的 差值 达到 最小化

返回可能的 最小差值 。

示例 1:

输入:nums = [90], k = 1
输出:0
解释:选出 1 名学生的分数,仅有 1 种方法:
- [90] 最高分和最低分之间的差值是 90 - 90 = 0
可能的最小差值是 0
示例 2:

输入:nums = [9,4,1,7], k = 2
输出:2
解释:选出 2 名学生的分数,有 6 种方法:
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 4 = 5
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 1 = 8
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 7 = 2
- [9,4,1,7] 最高分和最低分之间的差值是 4 - 1 = 3
- [9,4,1,7] 最高分和最低分之间的差值是 7 - 4 = 3
- [9,4,1,7] 最高分和最低分之间的差值是 7 - 1 = 6
可能的最小差值是 2

解题思路✨: 

这道题可以用滑动窗口来解决

  • 设定两个滑动窗口 i 和 j i代表左区间 j 代表右区间
  • 开始为空窗口  i=0 ,j=-1
  • 先移动右窗口当不满足条件就移动左窗口直到窗口的长度为k时 返回所有窗口中的最小值就是我们要的答案了

 代码附上✨:

class Solution {
    public int minimumDifference(int[] nums, int k) {
        Arrays.sort(nums);
            int n=nums.length;
            int i=0;
            int j=-1;
            int ans=100001;
           while(jk){
                   i++;
               }
               if(j-i+1==k){
                   ans=Math.min(ans,nums[j]-nums[i]);
               }
           }
           return ans;
        
    }
}

 2269题目描述✨:

一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目:

子字符串长度为 k 。
子字符串能整除 num 。
给你整数 num 和 k ,请你返回 num 的 k 美丽值。

注意:

允许有 前缀 0 。
0 不能整除任何值。
一个 子字符串 是一个字符串里的连续一段字符序列

示例 1:

输入:num = 240, k = 2
输出:2
解释:以下是 num 里长度为 k 的子字符串:
- "240" 中的 "24" :24 能整除 240 。
- "240" 中的 "40" :40 能整除 240 。
所以,k 美丽值为 2 。
示例 2:

输入:num = 430043, k = 2
输出:2
解释:以下是 num 里长度为 k 的子字符串:
- "430043" 中的 "43" :43 能整除 430043 。
- "430043" 中的 "30" :30 不能整除 430043 。
- "430043" 中的 "00" :0 不能整除 430043 。
- "430043" 中的 "04" :4 不能整除 430043 。
- "430043" 中的 "43" :43 能整除 430043 。
所以,k 美丽值为 2 。

解题思路✨:

 这道题直接正常模拟就行 判断非0是否整除

代码附上:

class Solution {
    public int divisorSubstrings(int num, int k) {
        int count=0;
        String str=String.valueOf(num); //将整型转化为字符串
        for(int i=0;i<str.length()-k+1;i++){
            int t=Integer.parseInt(str.substring(i,i+k));//将字符串转化为整数
                if(t==0){
                    continue;
                }else{
                    if(num%t==0){
                        count++;
                    }
                }

            
        }
        return count;


    }
}

 

 

1763题目描述✨:

当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串。比方说,"abABB" 是美好字符串,因为 'A' 和 'a' 同时出现了,且 'B' 和 'b' 也同时出现了。然而,"abA" 不是美好字符串因为 'b' 出现了,而 'B' 没有出现。

给你一个字符串 s ,请你返回 s 最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。

示例 1:

输入:s = "YazaAay"
输出:"aAa"
解释:"aAa" 是一个美好字符串,因为这个子串中仅含一种字母,其小写形式 'a' 和大写形式 'A' 也同时出现了。
"aAa" 是最长的美好子字符串。
示例 2:

输入:s = "Bb"
输出:"Bb"
解释:"Bb" 是美好字符串,因为 'B' 和 'b' 都出现了。整个字符串也是原字符串的子字符串。
示例 3:

输入:s = "c"
输出:""
解释:没有美好子字符串。
示例 4:

输入:s = "dDzeE"
输出:"dD"
解释:"dD" 和 "eE" 都是最长美好子字符串。
由于有多个美好子字符串,返回 "dD" ,因为它出现得最早。

 解题思路✨:

枚举:

  • 根据题意可知,美好字符串的定义是:每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串
  • 由于英文字母‘a’−‘z’ 最多只有 26 个, 因此可以利用二进制位来进行标记,a标记字符中出现过小写英文字母,b标记字符中出现过大写英文字母

  • 如果满足 a=b ,我们则认为字符串中所有的字符都满足大小写形式同时出现,则认定该字符串为美好字符串。

  • 题目要求如果出现多个美好字符串,返回最早出现的 

    我们首先需要检测出以字符串索引为0起始的子字符串

代码附上✨: 

class Solution {
    public String longestNiceSubstring(String s) {
        int n = s.length();
        int index = -1, len = 0;
        for (int i = 0; i < n; i++) {
            int a = 0, b = 0;
            for (int j = i; j = 'a' && c <= 'z') a |= (1 << (c - 'a'));
                else b |= (1 < len) {
                    index = i; len = j - i + 1;
                }
            }
        }
        return index == -1 ? "" : s.substring(index, index + len);
    }
}

 

 

以上就是小王同学带给大家的关于滑动窗口的题目

觉得小王同学写的不错的话麻烦三连一波

谢谢你们这么好看还关注了我