0    课程地址

https://coding.imooc.com/lesson/207.html#mid=13706

 

1    重点关注

1.1    见代码演练3.1

 

1.2    有序集合和无序集合

7-1二叉树实现的集合是有序的。有序集合都是基于搜索树实现的,如二叉树,平衡二叉树,红黑树等

7-2链表实现的结合是无序的。无序集合非基于哈希表实现。

 

 

2    课程内容

2.1    多重集合的实现

这块应用不多,实现的话,添加元素size即可

 

3    Coding

3.1    leetCode使用平衡二叉树解决摩斯密码问题 用了Set的特性(每个元素都是唯一的,重复的元素不会重复添加) 804问题

  • 需求

https://leetcode.cn/problems/unique-morse-code-words/

 

  • 进步

巧用偏移量解决问题,而不是用case when

 

  • 代码:
package com.company;

import java.util.Set;
import java.util.TreeSet;

public class Solution {

    public int uniqueMorseRepresentations(String[] words) {
        //1 定义平衡二叉树(红黑树)解决问题(不会有特殊二叉树深度等于size的情况,保证了复杂度较小)
        Set<String> set = new TreeSet<>();

        //2 定义摩斯密码数组
        String[] mosPassword = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--",
                "-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

        //3  巧用字母偏移量,用红黑树
        for(String word: words){
            //3.1   数组的每一个字母使用偏移量,取得摩斯密码数组的值
            StringBuilder temp = new StringBuilder();
            for(int i=0;i<word.length();i++){
                temp.append(mosPassword[word.charAt(i)-'a']);
            }
            set.add(temp.toString());
        }
        return set.size();
    }

}

 

posted on 2022-12-20 07:36  菜鸟乙  阅读(24)  评论(0编辑  收藏  举报