IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【英雄哥六月集训】第 22天: 有序集合 -> 正文阅读

[数据结构与算法]【英雄哥六月集训】第 22天: 有序集合

系列文章

【英雄哥六月集训】第 01天:数组

【英雄哥六月集训】第 02天:字符串

【英雄哥六月集训】第 03天:排序

【英雄哥六月集训】第 04天:贪心

【英雄哥六月集训】第 05天: 双指针

【英雄哥六月集训】第 06天:滑动窗口

【英雄哥六月集训】第 07天:哈希

【英雄哥六月集训】第 08天:前缀和

【英雄哥六月集训】第 09天:二分查找

【英雄哥六月集训】第 10天: 位运算

【英雄哥六月集训】第 11天: 矩阵

【英雄哥六月集训】第 12天: 链表

【英雄哥六月集训】第 13天: 双向链表

【英雄哥六月集训】第 14天: 栈

【英雄哥六月集训】第 15天: 二叉树

【英雄哥六月集训】第 16天: 队列

【英雄哥六月集训】第 17天: 广度优先搜索

【英雄哥六月集训】第 18天: 树

【英雄哥六月集训】第 19天: 二叉树

【英雄哥六月集训】第 20天: 二叉搜索树

【英雄哥六月集训】第 21天: 堆(优先队列)

【英雄哥六月集训】第 22天: 有序集合


有序集合

首先,集合的有序无序是指在插入的时候,保持插入的顺序性,先插入的放在集合前面,后插入的放在集合后面。
而排序是指插入元素后,集合中的元素是否自动进行排序(例如升序降序)。
实现List接口的,例如ArrayList,LinkedList都是有序的
实现Set接口的,例如HashSet,TreeSet,LinkHashSet等都是无序的,但是TreeSet是基于树排序的。
实现Map接口的,例如HashMap,HashTable,
LinkedHashMap,TreeMap也都是无序的,但是TreeMap是基于树排序的。

一、 我的日程安排表 III

732. 我的日程安排表 III

class MyCalendarThree {
    private TreeMap<Integer, Integer> cnt;

    public MyCalendarThree() {
        cnt = new TreeMap<Integer, Integer>();
    }
    
    public int book(int start, int end) {
        int ans = 0;
        int maxBook = 0;
        cnt.put(start, cnt.getOrDefault(start, 0) + 1);
        cnt.put(end, cnt.getOrDefault(end, 0) - 1);
        for (Map.Entry<Integer, Integer> entry : cnt.entrySet()) {
            maxBook += freq;
            ans = Math.max(maxBook, ans);
        }
        return ans;
    }
}


二、 最大频率栈

895. 最大频率栈

class FreqStack {
    Map<Integer, Stack<Integer>> freqStkMap;
    Map<Integer, Integer> numFreqMap;
    int maxFreq;

    public FreqStack() {
        freqStkMap = new HashMap<>();
        numFreqMap = new HashMap<>();
        maxFreq = 0;
    }
    
    public void push(int val) {
        int currFreq = numFreqMap.getOrDefault(val,0)+1;
        numFreqMap.put(val,currFreq);
        if(currFreq>maxFreq){
            maxFreq=currFreq;
        }
        freqStkMap.putIfAbsent(currFreq, new Stack<>());
        freqStkMap.get(currFreq).push(val);

    }
    
    public int pop() {
        int maxFreqNum = freqStkMap.get(maxFreq).pop();
        numFreqMap.put(maxFreqNum, numFreqMap.get(maxFreqNum) - 1);
        if(freqStkMap.get(maxFreq).size() == 0){
            maxFreq--;
        }
        return maxFreqNum;

    }
}

/**
 * Your FreqStack object will be instantiated and called as such:
 * FreqStack obj = new FreqStack();
 * obj.push(val);
 * int param_2 = obj.pop();
 */

三、 将数据流变为多个不相交区间

352. 将数据流变为多个不相交区间

class SummaryRanges {
    TreeMap<Integer,Integer> treeMap;

    public SummaryRanges() {
        treeMap = new TreeMap<>();

    }
    
    public void addNum(int val) {
        Integer l =treeMap.floorKey(val);
        if(l!= null && l<=val && treeMap.get(l)>=val){
            return;
        }
        Integer r =treeMap.ceilingKey(val);
        if(r!=null && r==val+1){
            treeMap.put(val, treeMap.get(r));
            treeMap.remove(r);
        } else {
            treeMap.put(val,val);
        }
        if(l!=null && treeMap.get(l) == val-1){
            treeMap.put(l,treeMap.get(val));
            treeMap.remove(val);
        }

    }
    
    public int[][] getIntervals() {
        int[][] ans = new int[treeMap.size()][2];
        int idx=0;
        for(Map.Entry<Integer,Integer> entry: treeMap.entrySet()){
            ans[idx][0] = entry.getKey();
            ans[idx++][1] = entry.getValue();
        }
        return ans;

    }
}

/**
 * Your SummaryRanges object will be instantiated and called as such:
 * SummaryRanges obj = new SummaryRanges();
 * obj.addNum(val);
 * int[][] param_2 = obj.getIntervals();
 */

总结

getOrDefault(Object key, V defaultValue)
意思就是当Map集合中有这个key时,就使用这个key对应的value值,如果没有就使用默认值defaultValue

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:19:22  更:2022-06-29 19:23:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:46:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码