前缀树,又称为Trie树,是一种树形数据结构,可用于高效地存储和检索字符串数据集合中的键,常用于自动补完和拼写检查等应用场景。下面对是对前缀树节点的定义:

1
2
3
4
class WordNetTree {
boolean end;
WordNetTree[] words = new WordNetTree[26];
}

其中end代表当前节点是否为结尾;words代表每个节点中的集合,数组长度为26,代表每次创建一个WordNetTree节点时,都会在该节点内部创建一个长度为26的WordNetTree数组。

这次在刷Leetcode时,在求解数组中的第K大问题时,想到了使用堆排序,因此本篇文章用于巩固对堆排序的学习以及代码实现。

题目描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

输入:[3,2,3,1,2,4,5,5,6] 和 k = 4

输出:4

当时看到此题时,第一反应就是想到使用大顶堆来求解,在第K次调堆后,就能够得到最K大元素。后续以大顶堆进行为例。

先来简单回顾堆排序:堆是一棵完全二叉树。如果是一个大顶堆,则根节点递归的大于其左右孩子节点的值。

以大顶堆为例:(3,2,3,1,2,4,5,5,6),对该待排序列进行堆排序。

本文用来记录对并查集的学习与总结,并通过leetcode的两道题目来加深对其的理论与实战学习(实现代码Java)。学习一种数据结构,最高效的方式,就是学以致用,所以这里,以leetcode的题目为例。

给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:”a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。

只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。

示例1:

输入:["a==b","b!=a"]
输出:false
解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满足第二个方程。没有办法分配变量同时满足这两个方程。

示例2:

输入:["b==a","a==b"]
输出:true
解释:我们可以指定 a = 1 且 b = 1 以满足满足这两个方程。