算法与数据结构
星星笑语_
我的征途是星辰大海。
展开
-
寻找二叉树两个节点的公共父节点
思路很简单,从根节点开始查询这两个节点,如果当前查到的节点是两个目标节点之一,直接返回,然后如果两个节点都位于父节点左边或者右边,递归,否则直接返回。public class Main { private static BinaryTree<Integer> getPublicParent(BinaryTree<Integer> rootTree, BinaryTree<Integer> tree1, BinaryTree<Integer> tre原创 2020-11-04 09:52:48 · 2128 阅读 · 3 评论 -
比较排序的下限讨论
对于n个任意数的排序,我们现在只通过比较大小的方式来对其进行排序。我们知道这个排序问题的时间复杂度的下限是nln(n),也就是说对于任意的基于比较的方式来排序的算法,不可能有时间复杂度小于nln(n)的排序方法。那么这个下界是如何的出来的呢?考虑n个数的大小排列方式,一共有n!种排列。不用考虑这n个数有相同的情况,那样只会使排列数量小于n!,再者,我们排序如果要保持相同数字的顺序,也就是...原创 2020-01-06 23:28:46 · 743 阅读 · 0 评论 -
一道算法题引申的链表实现大数运算
先来看一道LeetCode的题目:2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -...原创 2020-01-05 21:59:33 · 300 阅读 · 0 评论 -
数据结构与算法之从哈希表到HashMap(二)
HashMap的基本结构HashMap是基于哈希表的键值对存储类,它通过将键值对包装成Entry,然后根据键的hash值确定保存的位置。下面我们先看HashMap里几个重要的类与变量。Entry类static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key;...原创 2019-12-29 23:29:26 · 125 阅读 · 0 评论 -
数据结构与算法之从哈希表到HashMap(一)
哈希表的介绍数组和链表在保存数据的时候,一般不会对数据的性质来决定数据存放的顺序,所以他们在查询数据的时候,只能够通过从前往后遍历,从而查找到想应的数据;例如在一个int数组[12,34,56,324,24387]里查询是否存在关键字324时,我们只能够从第0位往后查询,然后查询到324,他的效率是o(n);链表也和数组类似。对于二叉搜索树和红黑树,他们是根据数据的大小来保存数据的,利用...原创 2019-12-15 22:13:52 · 220 阅读 · 0 评论 -
MD5加密浅析
文章目录MD5加密的概念MD5加密的简单使用第一步第二步第三步MD5加密的实用场景用户密码接口签名文件一致性校验MD5加密的安全与破解MD5加密的概念MD5加密是一种常用的信息摘要算法,主要用于保证数据的一致性以及签名验证,他是一种不可逆的加密算法。MD5加密是将任意的字节数组加密成32个字节的数据,然后他们在形式上表现为32位的16进制数。MD5加密的简单使用我们来看下MD5加密在Ja...原创 2019-11-17 23:11:23 · 1023 阅读 · 0 评论 -
数据结构与算法之详解二叉树排序
二叉树(堆)的概念二叉树(堆)是一种结构:每个节点均可有两个子节点,如此形成的一种倒立形树形结构,而一个数组也能够看成二叉树,二叉树的每一个节点均看成数组的一个元素。 10 23 25134 135 9如图示的二叉树对应于数组[10,23,25,134,135,9]。如果堆的每一个节点均比他的两个子节点大,我们就称这个二叉树为最大堆。如果对于一个节点i...原创 2019-11-10 21:07:18 · 279 阅读 · 0 评论