2023-03-15 集合Set与映射Map

36 篇文章 0 订阅

集合Set与映射Map

二分搜索书BST和链表LinkedList都是动态结构,都可以用于构造集合Set

  • 基于BST的Set:https://gitee.com/lsgwr/algorithms/blob/master/Part2Basic/src/main/java/Chapter07SetAndMap/Section1SetBasicAndBSTSet/BSTSet.java
  • 基于LinkedList的Map:https://gitee.com/lsgwr/algorithms/blob/master/Part2Basic/src/main/java/Chapter07SetAndMap/Section2LinkedListSet/LinkedListSet.java

BST和LinkedList都属于动态数据结构

BSTSet和LinkedList的时间复杂度比较

O(h)即O(logn)
BSTSet和LinkedList的时间复杂度比较

  • BSTSet存储节点是有序集合,类似TreeSet
  • LinkedListSet存储节点是无序集合,类似HashSet

LeetCode上的集合相关问题

  • 804.唯一摩尔斯密码词:https://leetcode-cn.com/problems/unique-morse-code-words/
class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] codecs = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        // 不同的翻译
        Set<String> diffTrans = new TreeSet<>();
        for(String word : words){
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < word.length(); i++){
                sb.append(codecs[word.charAt(i) - 'a']);
            }
            diffTrans.add(sb.toString());
        }
        return diffTrans.size();
    }
}

映射Map

基于BST和LinkedList都可以实现Map,但是节点需要改装下,需要支持键值对

基于BST的实现要比基于LinkedList时间复杂度低很多

  • 基于BST的Map实现: https://gitee.com/lsgwr/algorithms/blob/master/Part2Basic/src/main/java/Chapter07SetAndMap/Section7BSTMap/BSTMap.java
  • 基于LinkedList的Map实现: https://gitee.com/lsgwr/algorithms/blob/master/Part2Basic/src/main/java/Chapter07SetAndMap/Section7BSTMap/BSTMap.java

基于BST和LinkedList都可以实现Map

基于LinkedList的Map和基于BST的MAP比较

基于LinkedList的Map和基于BST的MAP比较

测试两种实现的性能

  • 测试代码: https://gitee.com/lsgwr/algorithms/blob/master/Part2Basic/src/main/java/Chapter07SetAndMap/Section8TestMap/Main.java

有序映射TreeMap和无序映射HashMap

  • TreeMap基于平衡二分搜索树实现(红黑树)
  • HashMap基于哈希表实现

7.9 LeetCode上关于Set和Map的问题

  • 349.求数组交集:https://leetcode-cn.com/problems/intersection-of-two-arrays/
  • 350.求数组交集II: https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/comments/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空無一悟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值