滑动窗口应用

LeetCode – 209

相加大于target的最小数组长度

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
//繁琐的考虑阈值
        // if(nums.length == 0 || nums == null){
        //     return 0;
        // }
        // int min = 0;
        // int max = 0;
        // int sum = nums[max];
        // int n = nums.length;
        // while(max < nums.length && min <= max){
        //     if(sum < target){
        //         if(max - min + 1 == nums.length){
        //             return 0;
        //         }
        //         max++;
        //         if(max == nums.length){
        //             break;
        //         }
        //         sum = sum + nums[max];
        //     }else if(sum >= target){
        //         int n0 = max - min + 1;
        //         if(n0 < n){
        //             n = n0;
        //         }
        //         //min后移
        //         sum = sum - nums[min];
        //         min++;
        //     }
        // }
        // return n;

//合理利用了循环体,在一个max下进行min的循环

        if(nums.length == 0 || nums == null){
            return 0;
        }
        int min = 0;
        int max = 0;
        int sum = 0;
        int n = nums.length+1;

        while(max < nums.length){
            sum = sum + nums[max];
            max++;
            while(sum >= target){
                n = Math.min(n,max-min);
                sum = sum - nums[min];
                min++;
            }
        }
       //是否存在n没有更新的状态:
        return n == nums.length +1 ? 0 : n;
    }
}

LeetCode ---- 1456

一个大字符串–固定长度的小字符串含有元音字母的最大个数

思想:固定长度的字符串,进一个出一个,判断是否为元音

class Solution {
    public int maxVowels(String s, int k) {
    //将字符串--》字符数组
        // char[] ch = new char[s.length()];
        // for(int i = 0 ; i < s.length(); i++ ){
        //      ch[i] = s.charAt(i);
        // }
        
        // int min = 0 ;
        // int max = min + k -1;
        // int result = 0;
	//首先进行固定字符串长度的计算
        // int n = 0 ;
        // for(int i = min ; i <= max; i++ ){
        //     n = n + Bijiao(ch[i]);
        // }
        // result = Math.max(result,n);
	//出去的min如果是元音则res - 1, 如果max是元音,res+1
        // while(max < ch.length-1 && min <= max){
        //     max++;
        //     n = n + Bijiao(ch[max]);
        //     n = n - Bijiao(ch[min]);
        //     min++;
        //     result = Math.max(result,n);
        // }
        // return result;
	
	//方法二:永远都是k的长度,i-k起点,i终点
        // int n = s.length();
        // int vowel_count = 0;
        // for (int i = 0; i < k; ++i) {
        //     vowel_count += Bijiao(s.charAt(i));
        // }
        // int ans = vowel_count;
        // for (int i = k; i < n; ++i) {
        //     vowel_count += Bijiao(s.charAt(i)) - Bijiao(s.charAt(i - k));
        //     ans = Math.max(ans, vowel_count);
        // }
        // return ans;

        //哈希表
        HashSet<Character> set = new HashSet<>();
        set.add('a');
        set.add('e');
        set.add('i');
        set.add('o');
        set.add('u');
        int res = 0 ;
        int count = 0;
        for(int i = 0 ; i < k; i++){
            char temp = s.charAt(i);
            if(set.contains(temp)){
                count++;
            }
        }
        res = Math.max(res,count);
        for(int i = k; i < s.length(); i++){
            char out = s.charAt(i - k);
            char in = s.charAt(i);
            if(set.contains(out)){
                count--;
            }
            if(set.contains(in)){
                count++;
            }
            res = Math.max(res,count);
        }

        return res;
    }

    // public static int Bijiao(char ch){
    //     return ((ch == 'a') || (ch == 'e') ||(ch == 'i') ||(ch == 'o') ||(ch == 'u') ) ? 1 : 0;
    // }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值