常见算法
常见算法
EamonHu
这个作者很懒,什么都没留下…
展开
-
哈夫曼树与哈夫曼编码
Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。引入如果有一篇文章,由若干个字符构成。每个ABC…Z都由7位编码,文章有1w个字符,那么有7w位进行编码。一个字节8位,首位是0。需要占用1W个字节。实际中每个单词的出现频率是不同的,比如e在文章中出现频率较高,我用5位给它编码,出现频率较低的使用7位、8位或者9位。这样效率会得到提高。看一个具体的例子:将百分制的成绩...原创 2020-04-07 17:59:55 · 3752 阅读 · 0 评论 -
【贪心策略】字典序拼接字符串,切割金条,代价利润,数据流中的中位数,会议室宣讲
贪心策略1.字典序拼接字符串题目描述思路代码实现2.切割金条问题题目描述思路代码实现3.代价利润问题题目描述思路代码实现4.数据流中的中位数5.会议室宣讲题目描述思路实现1.字典序拼接字符串题目描述字符串数组,将各字符串拼接,使得最低词典顺序。如:“ab”,“cd”,“ef”,拼接成“abcdef”最小,其他方式都比它大。思路到这里可能想到排序,再拼接,有一种情况是,“b”和“ba”拼接...原创 2020-04-07 15:24:49 · 743 阅读 · 0 评论 -
【重点】前缀树
思路每个结点有三个属性值记录有多少个字符经过这个节点记录有多少个字符串以当前节点结束每个节点的路径功能插入将字符串转换为char数组,挨个插入查找怎么插入,怎么查找。返回以当前节点结束的数量删除首先判断是否存在(进行查找)在删除到某个节点的时候,经过这个节点数量为0的时候。后面可以不考虑,直接断开前缀数量和查找类似,返回经过这个节点的数量...原创 2020-04-07 10:56:50 · 702 阅读 · 0 评论 -
并查集原理及实现--最通俗易懂解释
江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多少个弯,都认为是自己人。这样一来,江湖上就形成了一个一个的帮派,通过两两之间的朋友关系串联起来。而不在同一个帮派的人,无论如何都无法通过...原创 2020-04-06 23:33:16 · 747 阅读 · 0 评论 -
布隆过滤器的原理、使用场景、注意事项以及bitMap实现
什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。实现原理hashMap的问题判断一个文件中是否存在某个元...原创 2020-04-03 20:37:23 · 776 阅读 · 0 评论 -
【高频】二叉树的层次遍历BFS和深度遍历DFS
题目描述对二叉树的层次遍历和深度遍历实现思路层次遍历借助队列 LinkedList深度遍历借用栈 Stackimport java.util.*;public class BFSAndDFS { public class TreeNode { int val; TreeNode left; TreeNode right; ...原创 2020-04-02 10:52:49 · 710 阅读 · 0 评论 -
【重点】求一棵完全二叉树的节点个数
题目描述已知一棵完全二叉树,求其节点的个数要求:时间复杂度低于O(N),N为这棵树的节点个数实现思路若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。首先判断根节点的右子树的左边界。左子树的左边界在最后一层。说明此时根的左子树为满二叉树所有节点数 = 左子树 + 根节点 + 右子...原创 2020-04-02 10:31:06 · 1115 阅读 · 0 评论 -
【高频】判断一棵二叉树是否为二叉搜索树BST和完全二叉树CBT
题目描述判断一棵二叉树是否为二叉搜索树,完全二叉树实现思路public static class Node { int val; Node left; Node right; public Node(int data) { this.val = data; }}二叉搜索树二叉搜索树是一棵空树,或者是具有下列性质的二叉树: 若...原创 2020-04-02 09:57:01 · 902 阅读 · 0 评论 -
【高频】判断一棵二叉树是否为平衡二叉树
题目描述判断一棵二叉树是否为平衡二叉树实现思路平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。抓住两个点:左右子树也是平衡二叉树(想到递归)左右子树高度差不超过1public class IsBalanceOfTree { public static class Node { int val; ...原创 2020-04-02 09:07:08 · 556 阅读 · 0 评论 -
二叉树的先中后序遍历递归和非递归
题目描述实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式实现递归方式public static class Node { int val; Node left; Node right; public Node(int data) { this.val = data; }}// 前序递归public static ...原创 2020-04-01 23:18:13 · 593 阅读 · 0 评论 -
【重难点】两个单链表相交的一系列问题
题目描述在本题中,单链表可能有环,或者无环。给定两个单链表的头结点head1和head2,这两个链表可能相交也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null。空间复杂度为O(1)思路如果不限制额外空间复杂度,那么遍历单链表1,将所有值放入hashSet中,再依次遍历单链表2,如果链表2的在hashSet中发现有重复值,那么这个节点为相交节点。...原创 2020-04-01 16:33:17 · 602 阅读 · 0 评论 -
【高频】单向链表按某值分成左边小,中间相等,左边大的形式
题目描述给定一个单项链表的头结点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表的左边都是值小于pivot的节点,右边都是值大于pivot的节点。例如:9-->0-->4-->5-->1 pivot = 3输出:1-->0-->4-->9-->5 也可以是0-->1-->9-->...原创 2020-04-01 14:42:35 · 550 阅读 · 0 评论 -
【高频】判断一个链表是否为回文结构
题目描述给定一个链表的头结点head,请判断该链表是否为回文结构。例如: 1->2->1,返回true。1->2->2->1,返回true。15->6->15,返回true。1->2->3,返回false。进阶:如果链表长度为N,时间复杂度为O(N),额外空间复杂度达到O(1)。实现public class IsPalindromeLi...原创 2020-03-31 00:48:19 · 473 阅读 · 0 评论 -
有序链表公共部分
题目描述打印两个有序链表的公共部分【题目】给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。实现public class PrintCommonPart { public static class Node { int val; Node next; Node(int data) { t...原创 2020-03-31 00:43:55 · 783 阅读 · 0 评论 -
栈和队列的相互转换
import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class StackAndQueueConvert { public static class TwoStackQueue { private Stack<Integer> stackPu...原创 2020-03-31 00:32:51 · 529 阅读 · 0 评论 -
用数组实现大小固定的栈和队列
public class Array_To_Stack_Queue { public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSi...原创 2020-03-31 00:31:15 · 502 阅读 · 0 评论 -
回溯算法小结---LeetCode和剑指offer回溯例题Java实现
回溯法可以看成是蛮力法的升级版,它从解决问题每一步的所有可能选项里系统地选择可行的解决方案。回溯算法基于深度优先搜索算法和递归算法,在搜索过程中寻找问题的解。回溯算法建议先画图,整理出思路。先明白回溯的结束条件,进入回溯的条件,回溯的选择,回溯的参数选择。LeetCode46 全排列画图分析:每个叶子节点的形成路径就是一个全排列。更详细原文解析代码实现class Solution {...原创 2020-02-14 00:42:15 · 576 阅读 · 0 评论 -
深度优先搜索DFS规则及Java实现
深度优先搜索规则如果可能,访问一个邻接的未访问过的定点,标记它,并把它放入栈中当不能执行规则1时,如果栈不能为空,就从栈中弹出一个顶点。当不能执行规则1和规则2时,就完成了整个的搜索过程。代码实现:顶点类/** * 顶点类 */public class Vertex { public char label; public boolean wasVisited;...原创 2020-02-10 14:36:19 · 760 阅读 · 0 评论