LeetCode 2799、2840题解

使用hashmap加滑动窗口解决问题

例如List[1,3,1,2,2]

我们通过hashmap.put(nums[i],hashmap.getOrDefault(nums[i],0)+1)后再通过hashmap.size()获取键值对的数量,即不同值的数量。

滑动窗口思想如上所示:

复制代码
class Solution {

    public int countCompleteSubarrays(int[] nums) {

        int n = 0;

        HashMap<Integer,Integer> map = new HashMap<>();

        for(int i=0;i<nums.length;i++){

            map.put(nums[i],map.getOrDefault(nums[i],0)+1);

        }

        n = map.size();

        System.out.println("n:"+n);

  

        int left = 0;

        int right = n;

        int total = 0;

        while(right<=nums.length){

            HashMap<Integer,Integer> hashmap = new HashMap<>();

            for(int i=left;i<nums.length;i++){

                hashmap.put(nums[i],hashmap.getOrDefault(nums[i],0)+1);

                if(hashmap.size()==n) total++;

            }

            left++;

            right = n+left;

        }

        return total;

    }

}

如图所示为一种解决方法,也可以使用二维数组解决

复制代码
class Solution {

    public boolean checkStrings(String s1, String s2) {

        int[][] cnt1 = new int[2][26];

        int[][] cnt2 = new int[2][26];

        for (int i = 0; i < s1.length(); i++) {

            cnt1[i % 2][s1.charAt(i) - 'a']++;

            cnt2[i % 2][s2.charAt(i) - 'a']++;

        }

        return Arrays.deepEquals(cnt1, cnt2);

    }

}
相关推荐
leke200338 分钟前
2025年10月17日
算法
CoovallyAIHub40 分钟前
Mamba-3震撼登场!Transformer最强挑战者再进化,已进入ICLR 2026盲审
深度学习·算法·计算机视觉
Aqua Cheng.44 分钟前
代码随想录第七天|哈希表part02--454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
java·数据结构·算法·散列表
怀揣小梦想1 小时前
跟着Carl学算法--哈希表
数据结构·c++·笔记·算法·哈希算法·散列表
Nebula_g1 小时前
Java哈希表入门详解(Hash)
java·开发语言·学习·算法·哈希算法·初学者
Kent_J_Truman1 小时前
【模拟散列表】
数据结构·算法·蓝桥杯·散列表·常识类
Lchiyu1 小时前
哈希表 | 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
算法
玩镜的码农小师兄1 小时前
[从零开始面试算法] (04/100) LeetCode 136. 只出现一次的数字:哈希表与位运算的巅峰对决
c++·算法·leetcode·面试·位运算·hot100
RTC老炮2 小时前
webrtc弱网-AcknowledgedBitrateEstimatorInterface类源码分析与算法原理
网络·算法·webrtc
Antonio9152 小时前
【图像处理】常见图像插值算法与应用
图像处理·算法·计算机视觉