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(); } }
诸葛