Algorithm
文章平均质量分 71
希望之力
保持热情,给人们带来光明把
展开
-
04-树5 Root of AVL Tree
04-树5 Root of AVL Tree (25分)An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they d原创 2015-11-04 12:38:39 · 948 阅读 · 0 评论 -
【慢速学数据结构】集合篇
集合ADT,表示一种非顺序容器,且容器内的元素不重复。原创 2016-07-13 15:00:47 · 631 阅读 · 0 评论 -
Poj3984 迷宫问题
题目: Input 一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。 Output 左上角到右下角的最短路径,格式如样例所示。 Sample Input0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 Sample Output(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3)原创 2016-07-02 23:30:52 · 272 阅读 · 0 评论 -
【慢速学数据结构】集合(并查集)篇
上一篇实现的集合其实没什么卵用,跟个vector似的。并查集就比它厉害多了。原创 2016-07-14 00:30:36 · 510 阅读 · 0 评论 -
【慢速学数据结构】查找树篇
二叉查找树(排序二叉树),是一种支持快速查找、插入、删除的数据结构。原创 2016-07-15 18:48:15 · 550 阅读 · 0 评论 -
【慢速学数据结构】队列篇
概述队列ADT我相信大家都很清楚,就是FIFO嘛。这一篇,关键讲队列怎么实现。实现循环数组实现。原创 2016-07-15 01:38:27 · 616 阅读 · 0 评论 -
【慢速学数据结构】散列篇
散列表(哈希表),是一个关联数组,由key(关键字),value(值)组成,通过hash函数,将key计算成统一形式的不同的值,对应到数组的索引上。原创 2016-07-15 18:47:33 · 904 阅读 · 0 评论 -
跳台阶问题
问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?思路: 抽象思维。把台阶看成一个n位二进制数,青蛙踩过的位上为1,没踩的是0,问有多少个这样的数。答案显然是1<<(n-1)个数。我看到这题还是用的DP。因为以前做过一道类似的题目,每次只能跳1或2步,是用DP解的。贴一下这道题的DP解法。class Solution {原创 2016-07-07 18:07:44 · 299 阅读 · 0 评论 -
【慢速学数据结构】树的遍历
这虽然是个easy的话题,但我们还是要争取写出简洁和优雅的代码。递归形式:前中后序对应的是print的位置,这里只写前序遍历。void traverse(TreeNode *t){ if(!t) return; print(t->val); traverse(t->left); traverse(t->right);}非递归形式:// 前序遍历void iter原创 2016-07-20 15:46:11 · 699 阅读 · 0 评论 -
【慢速学数据结构】图篇
介绍图,是由一个顶点集和一个边集构成的数据结构。怎么在程序里表示图?有两种方法,邻接矩阵和邻接表。虽然用邻接矩阵表示非常简单,但它也有些不可忽视的缺点。比如矩阵的大小不好提前预知,动态数组的话又不好实现。如果图是稀疏的话,也造成空间浪费。邻接表就要好很多。实现数据结构要怎么设计?先试着去写一下最基本的东西。 顶点。template<typename Vt, typename Et>clas原创 2016-07-20 11:14:55 · 642 阅读 · 0 评论 -
【慢速学数据结构】优先队列(堆) 篇
什么是堆呢?堆是一种基于树的数据结构,并且具有堆序性质。堆序性是指,父节点与孩子节点的关键字的值,始终维持一个顺序关系。因此,最典型的有最大堆或最小堆。原创 2016-07-12 01:04:48 · 798 阅读 · 0 评论 -
【慢速学数据结构】排序
前言刚开始学的时候,一般都是几大排序一起看,看着看着就晕了,觉得很难。其实没学会的原因只有一个,那就是自己打击了自己的积极性。如果你心里对它们还存有畏难情绪的话,不妨先看看这些视频,匈牙利民间舞模拟各种排序,很滑稽;) 地址快速排序这代码够简洁了吧!void quickSort(std::vector<int> &a, int left, int right){ if(left < rig原创 2016-07-20 17:18:23 · 534 阅读 · 0 评论 -
贴两道灵活运用位运算知识来解题的
1. Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.class Solution {public: int getSum(int a, int b) { while(b){ int result = a ^原创 2016-07-10 23:23:00 · 385 阅读 · 0 评论 -
判断单链表是否为回文
这道题很有意思,你能在O(1) space,O(n) time约束下做出来吗?让我们来一步一步观察,思考。回文,那么意味着是轴对称的,想到用比较最左端和最右端的方法,可是这在单链表上是根本没法做的,除非是双向链表,但题目也不允许修改数据结构啊,所以不可行。再想想,把链表逆转吧,但是逆转之后怎么办?失去了比较对象啊。再想想,那逆转一半如何?如果是回文的话,前半段和后半段就必须是一样的。好,这方法靠谱,原创 2016-07-10 21:15:52 · 400 阅读 · 0 评论 -
03-树1 树的同构
03-树1 树的同构 (25分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:原创 2015-10-05 16:15:43 · 685 阅读 · 0 评论 -
03-树2 List Leaves
03-树2 List Leaves原创 2015-10-05 16:16:14 · 558 阅读 · 0 评论 -
04-树6 Complete Binary Search Tree
04-树6 Complete Binary Search Tree (30分)A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes wi原创 2015-11-05 15:33:32 · 1383 阅读 · 0 评论 -
05-树7 堆中的路径
05-树7 堆中的路径 (25分)将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对原创 2015-11-05 15:36:53 · 446 阅读 · 0 评论 -
03-树3 Tree Traversals Again
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stac原创 2015-10-27 20:26:10 · 400 阅读 · 0 评论 -
06-图2 Saving James Bond - Easy Version
06-图2 Saving James Bond - Easy Version (25分)This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the world's most famous spy, was captured by a group原创 2015-11-23 09:43:51 · 786 阅读 · 0 评论 -
05-树9 Huffman Codes
In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redundancy Codes", and hence printed his name in the history of computer science. As a professor who gives the f原创 2015-11-23 09:23:24 · 1032 阅读 · 0 评论 -
05-树8 File Transfer
We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer原创 2015-11-23 09:15:55 · 728 阅读 · 0 评论 -
06-图1 列出连通集
06-图1 列出连通集 (25分)给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式原创 2015-11-23 09:30:45 · 654 阅读 · 0 评论 -
04-树4 是否同一棵二叉搜索树
04-树4 是否同一棵二叉搜索树 (25分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1原创 2015-10-31 12:41:20 · 1446 阅读 · 0 评论 -
[LeetCode] Sort Colors
思路:题目意思就是给你一个元素取值有限的数组,让你排序,直接想到的是计数排序,但是需要遍历两边,问你有没有只遍历一遍的方法。我没想出来,看了别人用交换元素的方法,觉得有趣,就自己写了下,比他简略一点。class Solution {public: void sortColors(vector& nums) { auto start = nums.begin()原创 2015-11-29 16:48:56 · 360 阅读 · 0 评论 -
[Leetcode] Counting Bits
题目要求: 输入N,求1~N的数中各有多少个1的位。地址分析思路: 求一个正整数中有多少个位为1,只要通过不断与1相’与’,右移一位就行了,在这道题中,这种做法的耗时是O(N*sizeof(int)),要想达到O(N)的时间,对每个数而言必须在O(1)的时间计算出它有多少个1位,单纯通过位运算和逻辑运算似乎很难实现,于是就想,能不能利用之前计算的数呢。直接看代码:vector<int> coun原创 2016-09-04 13:31:52 · 556 阅读 · 0 评论