数据结构
文章平均质量分 59
ParadiseHeaven
Learn to Think && Ask
展开
-
Leetcode 543. 二叉树的直径
Leetcode 543. 二叉树的直径 https://leetcode-cn.com/problems/diameter-of-binary-tree 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径原创 2020-12-20 10:02:36 · 162 阅读 · 1 评论 -
二维数组排序方法
Arrays.sort(T[], new Comparator<T>() { public int compare(T a, T b){ return fa - fb; } }); ①对序列进行排序,序列中单位元素的类型T,决定了重写Comparator类中的参数类型 ②fa/fb表示自定义的排序方式,返回正数表示参数a大于参数b ③默认为从小到大排序,用参数a减参数b。若需要从大到小排序,则用参数b减参数a 例:对int二维数组进行排序 Arrays.sort(points, new原创 2020-11-23 15:29:31 · 2725 阅读 · 0 评论 -
背包--01背包,完全背包,多重背包
哈哈 01背包 f[i][v] = max{ f[i - 1][v],f[i - 1][v - c[i]] + w[i] } 完全背包 f[i][v] = max{ f[i - 1][v - kc[i]] + kw[i] | 0 <= kc[i] <= v } 多重背包 f[i][v] = max{ f[i - 1][v - kc[i]] + k*w[i] | 0 <= k &l...原创 2020-11-18 14:07:14 · 108 阅读 · 0 评论 -
Huffman
链表实现 #include &amp;lt;bits/stdc++.h&amp;gt; #define maxn 1005 using namespace std; struct node* create(char *ch, int *w, int n); void print(struct node* root, string res); struct node { char data; int weig...原创 2020-11-18 14:04:09 · 130 阅读 · 0 评论 -
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!
参考 https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/原创 2020-09-28 16:08:59 · 121 阅读 · 0 评论 -
线段树(Segment Tree)
线段树(Segment Tree) 0. 给定一数组 (1)计算区间和 – query,(2)修改数组中的某一个值 – update 方法一:遍历 时间复杂度 如果query与update的次数都很多的话,O(n)的时间复杂度会导致非常非常慢 方法二: 前缀和 给定原数组arr,用sum_arr存储arr数组前面k个元素的和 query计算区间和,只需要sum_arr[j] - sum_arr[i]即可得出,时间复杂度为O(1) 但此时update的时间复杂度会变成O(n) 对比: 所以,当query原创 2020-09-10 17:28:57 · 153 阅读 · 0 评论 -
LeetCode 258. 各位相加
Digital root Wikipedia的解释 直接上公式: class Solution { public int addDigits(int num) { if(num == 0) return 0; return 1 + ((num-1)%9); } }原创 2020-09-05 15:34:14 · 130 阅读 · 0 评论 -
二分查找法的实现和应用汇总
到目前位置,似乎我们学到的算法中,时间复杂度是O(log n),好像就数二分查找法,其他的诸如排序算法都是 O(n log n)或者O(n2)。但是也正是因为有二分的 O(log n), 才让很多 O(n2)缩减到只要O(n log n)。 关于二分查找法 二分查找法主要是解决在“一堆数中找出指定的数”这类问题。 而想要应用二分查找法,这“一堆数”必须有一下特征: 存储在数组中...转载 2018-01-29 21:49:08 · 775 阅读 · 0 评论 -
并查集
int find(int x) //查找根节点 { int r = x; while (pre[r] != r) //返回根节点 r r = pre[r]; int i = x; int j; while (i != r) //路径压缩 { j = pre[i]; // 在改变上级之前用临时变量 j 记录下他的值 pre[i] = r; //把...原创 2018-01-29 11:51:18 · 228 阅读 · 0 评论 -
二叉树前序、中序、后序遍历非递归写法的透彻解析
转载于:http://blog.csdn.net/zhangxiangdavaid/article/details/37115355 前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的: ...转载 2017-11-22 08:41:14 · 460 阅读 · 0 评论 -
二叉树的基本操作(总结)
二叉树的基本操作 二叉树的定义决定了其大多数操作都可以由递归去实现 本文通过递归和非递归两种方式实现二叉树的基本操作(加深对原理的理解) 1.二叉树的声明 typedef char ElementType; typedef struct TreeNode* BinTree; struct TreeNode{ ElementType Data; struct Tre...原创 2017-11-21 23:05:55 · 1142 阅读 · 0 评论 -
表达式转换(25 分)(栈的应用)
中缀式转后缀式 栈当中只保存了操作符 1.如果遇到操作数,直接输出。 2.如果遇到操作符,则将其压入到栈中,遇到左括号时也将其压入栈中。 3.如果遇到一个右括号,则依次将栈顶元素弹出,并输出,直到遇到左括号为止。注意,左括号只弹出并不输出。 4.如果遇到任何其他的操作符,如("+", "*","(")等,从栈中弹出元素直到遇到发现...原创 2017-12-09 14:59:00 · 2118 阅读 · 0 评论 -
堆(优先队列)的基本操作
堆(优先队列)的基本操作 堆是一棵完全二叉树,所以可以利用数组来实现。 以1号作为root,则对于数组中的任意一个i,其左儿子在(2*i),右儿子在(2*i+1),父亲在(i/2)。 下面以最小堆为例,实现一些基本操作: 1.堆的声明 2.PercolateUp, PercolateDown 3.Insert 4.DeleteMin原创 2017-12-14 18:30:04 · 470 阅读 · 0 评论 -
Deque C语言实现 && C++ STL基本操作
deque (usually pronounced like "deck") is an irregular acronym ofdouble-endedqueue. Double-ended queues are sequence containers with dynamic sizes that can be expanded or contracted on both ends (either its front or its back). C语言实现deque C++ STL成员函数,基本操作示例原创 2017-12-19 19:28:40 · 1944 阅读 · 0 评论 -
7-20 电话聊天狂人(25 分)(Hash模板)
7-20 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。 输出格式: 在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小...原创 2017-12-07 20:06:08 · 2710 阅读 · 0 评论 -
傻子能看懂的并查集入门讲解
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连转载 2018-01-29 11:41:21 · 471 阅读 · 0 评论 -
二叉搜索树的操作集
二叉搜索树的操作集 本题要求实现给定二叉搜索树的5种常用操作。 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree BST, ElementType X ); Position Find( BinTree BST, ElementType X ); Position FindMin( B...原创 2017-11-22 09:07:26 · 417 阅读 · 0 评论