算法练习
文章平均质量分 67
Pango_lulu
这个作者很懒,什么都没留下…
展开
-
旋转字符串
来自 The-Art-Of-Programming-By-July 中的1.1。原创 2014-11-13 14:05:56 · 496 阅读 · 0 评论 -
常见算法:C语言求最小公倍数和最大公约数三种算法
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:① a%b得余数c② 若c=0,则b即为两数的最大公约数③ 若c转载 2015-06-03 14:25:35 · 800 阅读 · 0 评论 -
二分查找
在有序向量v[lo,hi)中返回不大于e的最后一个元素的位置。若e若e>v[hi-1],则返回hi-1当向量中存在多个e时,返回最后一个e的位置。int binarySearch(int vec[], int e, int lo, int hi){ while(lo < hi) { int mid = (lo + hi) >> 1; (e < vec[mid]) ?原创 2015-04-11 14:35:50 · 608 阅读 · 0 评论 -
归并排序(数组)
数组的归并排序。void merge(int vec[], int lo, int mid, int hi);void mergeSort(int vec[], int lo, int hi){ if(hi - lo < 2) return; int mid = (lo + hi) >> 1; mergeSort(vec, lo, mid); mergeSort(vec, mid原创 2015-04-11 13:47:39 · 809 阅读 · 0 评论 -
灯塔(LightHouse)
DescriptionAs shown in the following figure, If another lighthouse is in gray area, they can beacon each other.For example, in following figure, (B, R) is a pair of lighthouse which can beacon e原创 2015-04-11 17:40:49 · 1271 阅读 · 0 评论 -
冒泡排序(优化版本)
对于类似于(3,2,1,5,6,7)的序列,可以看出这个序列的后缀是已经有序的,所以在前一趟扫描后发现后缀有序,在下一次扫描时就忽略有序的后缀,而不是仅仅长度减一,这样就能避免无谓的扫描。代码如下:int bubble(int vec[], int lo, int hi);void bubbleSort(int vec[], int lo, int hi){ while(l原创 2015-04-11 11:31:59 · 455 阅读 · 0 评论 -
二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。如下面的二维数组就是每行、每列都递增排序。1 2 8 92 4 9 124 7 10 136 8 11 15按照剑指offer上面作者的解答,有如下规律:首先选取数组右上角的数字。如果该数字等原创 2015-01-22 22:59:12 · 443 阅读 · 0 评论 -
A串减去B串中的字符
A串减去B串中的字符,要求不生成新的字符串。定义两个指针i和j,i用于保存字符,j用于扫描字符。思想可以扩展到在字符串中去掉冗余空格等问题。void func(char *A, const char *B){ int i = 0, j = 0; set s; while(B[i] != '\0') s.insert(B[i++]);原创 2015-01-23 19:36:26 · 833 阅读 · 0 评论 -
最短路之Bellman-Ford算法
Bellman-Ford算法能在一般情况下(存在负权边的情况)下,解决单源最短路问题。同时可以检测图中是否存在着一个从源点可达的权和为负的回路。若存在这样的回路的话,算法说明该问题误解;若不存在,算法将产生最短路径及其权值。基于邻接矩阵实现:#include #include #include #define MAX_VAL 100000#define MAX_NODE 1原创 2014-12-14 18:06:56 · 654 阅读 · 0 评论 -
Longest Repeated Sequence
描述 You are given a sequence of integers, A = a1, a2, ... an. A consecutive subsequence of A (say ai, ai+1 ... aj) is called a "repeated sequence" if it appears more than once in A (there exists some转载 2014-12-13 22:24:37 · 465 阅读 · 0 评论 -
二叉树的遍历(递归与非递归)
前序遍历:操作顺序为:父节点 -> 左儿子 -> 右儿子递归版本struct node{ int data; struct node * left; struct node * right;};void preOrder(node *root){ if(root != NULL) { coutdata<<" ";原创 2015-01-12 20:15:01 · 460 阅读 · 0 评论 -
Google 面试题 第K小的数字 二分逼近&二分查找
题目描述: 给定两个整型数组A和B。我们将A和B中的元素两两相加可以得到数组C。譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]。现在给你数组A和B,求由A和B两两相加得到的数组C中,第K小的数字。 输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为三个整数m,n, k(1转载 2015-01-11 23:52:59 · 512 阅读 · 0 评论 -
SkipList 跳表
一个跳跃表的简单实现,具体的解释参看:http://kenby.iteye.com/blog/1187303typedef struct SkipListNode_{ int data; struct SkipListNode_ *next; struct SkipListNode_ *down;}SkipListNode;typedef s原创 2014-12-10 22:21:37 · 410 阅读 · 0 评论 -
Trie树
Trie树的解释参见:http://blog.csdn.net/hguisu/article/details/8131559下面是用C++实现的代码#ifndef TRIE_H#define TRIE_H#define TRIE_SIZE_DEF 128const int TRIE_SIZE = TRIE_SIZE_DEF;union NODE_TYPE{ COM原创 2015-01-29 01:01:53 · 491 阅读 · 0 评论 -
Huffman树(使用优先队列优化)
实现了使用队列进行优化的Huffman树。#include #include #include #include using namespace std;struct Node{ int val; struct Node * left; struct Node * right;};typedef struct Node * p_Node;stru原创 2015-01-27 20:06:31 · 774 阅读 · 0 评论 -
中缀表达式转后缀表达式
很简单的中缀表达式转后缀表达式。原创 2014-11-23 22:46:57 · 391 阅读 · 0 评论 -
计算二叉树中节点的最大距离
主要有两种思路:原创 2014-10-16 19:55:33 · 672 阅读 · 0 评论 -
单链表反转(逆序)
给定一个单链表,求其逆序。主要有两种原创 2014-11-13 12:58:31 · 475 阅读 · 0 评论 -
动态规划:从新手到专家
前言本文翻译自TopCoder上的一篇文章:Dynamic Programming: From novice to advanced,并非严格逐字逐句翻译,其中加入了自己的一些理解。水平有限,还望指摘。前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。这篇文章是基于实例展开来讲的,因为转载 2015-06-04 22:14:29 · 518 阅读 · 0 评论