算法
文章平均质量分 72
iteye_7202
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode – Min Stack
转自:http://www.programcreek.com/2014/02/leetcode-min-stack-java/Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.push(x) -- Push element x onto stac...原创 2015-06-11 18:27:55 · 174 阅读 · 0 评论 -
归并排序求逆序对的代码(C语言)
#include <stdio.h>#include <stdlib.h>#define MAX 32767int merge(int *array, int p,int q,int r) { //归并array[p...q] 与 array[q+1...r] int tempSum=0; int n1 = q-p+1;...2011-05-01 22:17:16 · 1324 阅读 · 0 评论 -
编程之美2.19区间重合判断
/* * 区间重合判断 * 比如,给出待判断区间[x,y]如[1,6],以及目标区间[x1, y1],[x2,y2]....[xi, yi](如[2,3] [1,2] [3, 9]), * 判断[1,6]是否在目标区间中 * * 做法: 先把根据各个目标区间的第一个元素xi排序(可用快排),然后将目标区间中可以合并的区间进行合并,然后 * 在目标...2011-05-02 20:09:00 · 108 阅读 · 0 评论 -
编程之美2.14 求数组的子数组之和的最大值
一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的) 例子:有数组( -2, 5, 3, -6, 4, -8, 6),则其子数组之和的最大值为8,其对应的数组为(5,3) 《编程之美》最后给出了一个时间复杂度为O(n)的算法,实现的代码如下: #include <...2011-05-07 00:12:23 · 115 阅读 · 0 评论 -
编程之美 2.5 寻找最大的K个数
问题: 有很多个无序的数,假定他们各不相等,怎么选出其中最大的若干个数呢? 解答:寻找N个数中最大的K个数,本质上就是寻找最大的K个数中最小的那个,也就是寻找第K大的数,可以使用二分搜索的策略。假设N个数中最大的数为Vmax,最小的数为Vmin,那么这N个数中的第K大的数一定在[Vmin,Vmax]之间,可以在这个区间中二分搜索N个数中第K大的数p。 #include <...2011-05-17 09:28:01 · 126 阅读 · 0 评论 -
《单链表的环的入口点一个小证明》
http://blog.youkuaiyun.com/learniting/article/details/7314475 中《单链表的环的入口点一个小证明》 如何判断一个单向链表是否有环?如果有,如何找到其入口节点的指针? 算法思想:用两个指针p1,p2同时指向链表的头部,p1一次移动一步,p2一次移动两步,如果最终p1和p2重合则说明链表有环,如果p2走到空指针(链表的结...原创 2013-06-16 23:14:07 · 144 阅读 · 0 评论 -
Google面试题:赛马问题
转自: http://coolshell.cn/articles/1202.html 据说,这是Google的面试题。面试题目如下:一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问,最少得比多少场才能知道跑得最快的5匹马?(不能使用撞大运的算法)很明显这是一个算法题,网上有很多...原创 2013-07-10 23:52:57 · 324 阅读 · 0 评论 -
LeetCode | Decode Ways
题目:A message containing letters from A-Z is being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26Given an encoded message containing digits, deter...原创 2015-05-28 22:09:42 · 152 阅读 · 0 评论 -
判断是否二叉搜索树
转自:http://blog.163.com/yichangjun1989@126/blog/static/1319720282014641735487/ 给定一棵二叉树的根结点,树中每个结点包含一个整数值val以及左右儿子结点指针left, right,判断该树是否为二叉搜索数(Binary Search Tree)。二叉搜索树的简单定义:对于树中任意一棵以T为根结点的子树,T的...原创 2015-05-31 16:49:04 · 182 阅读 · 0 评论 -
最大子序列和问题
问题描述: 输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:序列:-2 11 -4 13 -5 -2,则最大子序列和为20。序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。 算法一://穷举法,复杂度O(n^3) long maxSubSum1(c...原创 2015-06-08 09:10:58 · 181 阅读 · 0 评论 -
Word Break II
转自:http://www.acmerblog.com/word-break-ii-6128.html?utm_source=tuicoolGiven a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictiona...原创 2015-06-09 23:38:18 · 152 阅读 · 0 评论 -
二叉树中所有节点的左右子树相互交换 递归与非递归程序
//将二叉树中所有节点的左右子树相互交换转自:http://blog.youkuaiyun.com/girlkoo/article/details/17605349[cpp] view plaincopy BiNode* Exchange(BiNode* T) { BiNode* p; if(NULL==T || (NULL==T->lc...原创 2015-06-11 14:18:15 · 3012 阅读 · 0 评论 -
快速排序的代码
package introductionToAlgorithms; public class QuickSort { static int[] a = {3,1,7,4,10,6,8,9,2,5}; static int findPivot(int low,int high) { int i = low, j = high+1; int pivotV...2011-04-17 23:36:36 · 104 阅读 · 0 评论 -
leetcode之 median of two sorted arrays
另一种方法即是利用类似merge的操作找到中位数,利用两个分别指向A和B数组头的指针去遍历数组,然后统计元素个数,直到找到中位数,此时算法复杂度为O(n)。之后还尝试了根据算法导论中的习题(9.3-8)扩展的方法,但是该方法会存在无穷多的边界细节问题,而且扩展也不见得正确,这个可从各网页的评论看出,非常不建议大家走这条路。最后从medianof two sorted arrays中看到了一种...原创 2015-07-30 00:08:41 · 160 阅读 · 0 评论 -
[转]稳定排序和不稳定排序
首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序...原创 2013-04-21 12:11:03 · 115 阅读 · 0 评论 -
单链表原地逆置递归与非递归解法
#include <stdio.h>typedef struct LinkNode{ int data; struct LinkNode *next;} Node;//非递归解法Node* reverse1(Node* header) { Node* p = header->next; header->next = NULL;...2014-07-24 23:48:50 · 205 阅读 · 0 评论 -
二叉树中两个结点的最近公共祖先
Node* findComAncestor(Node* root, Node* m, Node* n) { if (root == m || root == n || root == NULL) { return root; } Node* left = findComAnces...原创 2014-08-03 11:30:33 · 146 阅读 · 0 评论 -
[leetcode] A Distance Maximizing Problem的疑问
http://leetcode.com/2011/05/a-distance-maximizing-problem.html 问题: Given an array A of integers, find the maximum of j-i subjected to the constraint of A[i] < A[j]. 解法二:排序后的lookup table是用来...2014-08-25 22:38:14 · 114 阅读 · 0 评论 -
一些算法刷题的网站
1. leetcode http://leetcode.com/ 2. careerup http://www.careercup.com/http://hawstein.com/posts/ctci-solutions-contents.html 3. glassdoorhttp://www.glassdoor.com/index.htm 4. top...2014-09-04 22:31:29 · 477 阅读 · 0 评论 -
利用动态规划求连续数组最大和以及最大子矩阵的和
题目一:给定一个整型数组,数组中有正有负,求最大连续子序列的和。 解法:利用动态规划的思想。设f(n)表示以a[n]为子序列最后一个元素的最大和,则可以有下面的规则:(1)当f(n-1)<0时,f(n)=a[n];(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a[n]。用一个nGreatestNum来记录最大值,每次与f(n)进行比较,...原创 2014-09-11 09:14:21 · 171 阅读 · 0 评论 -
外部排序技术之多路归并
转自:http://blog.chinaunix.net/uid-25324849-id-2182916.html 重点:败者树的创建调整函数1.外部排序概述外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次...原创 2014-10-19 11:32:53 · 290 阅读 · 0 评论 -
P问题、NP问题和NP完全问题
1、P问题P是一个判定问题类,这些问题可以用一个确定性算法在多项式时间内判定或解出。如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题的集合。NP是一个判定问题类,这些问题可以用一个确定算法在多项式时间内检查或验证出它们的解;P事实上很直观,我们通常在编程中求解的问题大多...原创 2014-10-28 23:47:07 · 246 阅读 · 0 评论 -
A* Pathfinding for Beginners
转自:http://www.policyalmanac.org/games/aStarTutorial.htmBy Patrick Lester (Updated July 18, 2005) The A* (pronounced A-star) algorithm can be complicated for beginners. While there are many art...原创 2014-11-01 10:40:24 · 308 阅读 · 0 评论 -
数组乱序(时间复杂度O(n))
主要思想是从最后一个数到第二个数依次遍历,每次产生一个小于当前数的随机数k,再将list[k]和当前数交换[code="java"]import java.util.Random;public class Shuffle { static void shuffle(int[] list) { Random r= new Random(); for(int i=...原创 2010-12-16 22:26:52 · 396 阅读 · 0 评论 -
算法题
1. 求随机数构成的数组中找到长度大于=3的最长的等差数列输出等差数列由小到大如果没有符合条件的就输出[0,0] 格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5] 要求时间复杂度,空间复杂度尽量小 2. 在任意给定的n个数中,既包括正数也包括负数,在这n个数中找出m(2<=m< n)个,使得这m个数的和的绝对值最小?? ...2011-05-25 22:15:53 · 109 阅读 · 0 评论 -
算法导论15.5-1答案
题目:算法导论第二版 P216 15.5-1package introductionToAlgorithms.dp;public class ConstructOprimalBST { private int[][] root={{1,1,2,2,2},{0,2,2,2,4}, {0,0,3,4,5},{0,0,0,4,5},{0,0,0,0,5}}; p...2011-06-04 15:07:14 · 520 阅读 · 0 评论 -
查找最小的k个元素(转)
转自 http://anwj336.blog.163.com/blog/static/89415209201010110025364/题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlog...原创 2011-06-04 18:22:48 · 118 阅读 · 0 评论 -
HDU_1087_Super Jumping! Jumping! Jumping!
Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now.The game ca...2011-06-06 12:29:54 · 123 阅读 · 0 评论 -
编程之美3.8 求二叉树节点的最大距离
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。写一个程序求一棵二叉树相距最远的两个节点之间的距离。 分析: 对任意一个节点,以该节点为根,假设这个根有k个孩子节点,那么相距最远的两个节点U和V之间的路径与这个根节点的关系有两种情况。 1.若路径经过根Root,则U和V是属于不同的子树的,且它们都是该子树中到根节点最远的节点,否则...2011-06-09 23:26:25 · 161 阅读 · 0 评论 -
重新排列使数组的奇数在左边,偶数在右边,O(n)
题目:对任意数组,重新排列使数组的奇数在左边,偶数在右边,要求时间复杂度为O(n)。 例子: {1,2,3,4,5,6,7,8,9,10} -> {1,3,5,7,9,2,4,6,8,10} 思路:类似快速排序的处理,从左边扫描直到找到偶数,再从右边扫描直至找到奇数,再交换。 代码:package algorithm.ms100;public cla...2011-06-26 16:48:23 · 395 阅读 · 0 评论 -
求长为n的数中任意m个数的组合
问题可分解为:1. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。2. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。很明显,上述方法是一个递归的过程,也就是说用递归的方法可以很干净利索地求得所有组合。 上代码: package algorithm.ms100;publ...2011-06-26 21:30:40 · 325 阅读 · 0 评论 -
约瑟夫环问题
第一种算法的复杂度不太好,第二种算法主要利用了约瑟夫环的数学特性,额,现在还没完全看懂,下次接着看。(这一部分来自http://www.cnblogs.com/EricYang/archive/2009/09/04/1560478.html)[code="java"]public class Josephus { static void josephus( int[] A,in...2010-12-13 15:54:23 · 133 阅读 · 0 评论 -
几道算法题
1. 在一个图里面给一个点,每个点都有颜色,要求给出与这个点相同着色且相邻的最大区域,写算法实现2.给定一个序列如{A,B,C,D},先序关系,如(A先于B),,,要求按先序关系给出整个序列的顺序,如,,的顺序为C,D,A,B,3.求证一个链表里是否有环4.二维的空间中有很多点,要求求出所有点中最近的一对点,时间复杂度要好。多做算法题,topcoder,pojonline,研究设计...2010-12-15 18:44:00 · 114 阅读 · 0 评论 -
PKU Online Judge POJ流传最广的分类,希望以后会切之(转)
转自 [url]http://bbs.pediy.com/showthread.php?t=123253[/url]多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3...原创 2010-12-16 11:08:29 · 329 阅读 · 0 评论 -
寻找最长递增子序列 O(nlgn)算法
题目:设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。 算法思想(参考http://hi.baidu.com/silverxinger/blog/item/571e7cdb996d1c...2011-05-22 12:47:41 · 486 阅读 · 0 评论 -
编程之美2.16 数组中最长递增子序列的长度 O(nlgn)
题目: 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。 在下面的代码中lis[i]表示以array[i]结尾的递增子序列的最大长度,max[j]表示...2011-08-31 20:43:02 · 164 阅读 · 0 评论 -
不用栈实现二叉树非递归中序遍历
有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针。要求不用递归,中序遍历这棵树。另要求空间复杂度是O(1). 空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所以想了想思路,也请教过好几个朋友,大家都基本想法都差不多,由于有指向父节点的指针,必定可以回溯,从而可以不需要堆栈来做记录. view plain/*思路: 关于终止条件:...原创 2011-09-09 21:18:18 · 399 阅读 · 0 评论 -
O(nlgn)的Josephus环解法
Josephus问题的定义如下:假设n个人排成环形,且有一正整数m<=n。从某个指定的人开始,沿环报数。每遇到第m个人就让其出列,且报数进行下去,这个过程直到所有人都出列为止。假设m不是常数。请描述一个O(nlgn)时间的算法,使给定的整数n和m,输出(n,m)-Josephus排列。 解法:使用顺序统计树(order-statistic tree),顺序统计树的插入、删除的时间复杂...2011-09-09 22:44:11 · 116 阅读 · 0 评论 -
k路已排序链表的合并O(nlgk)
题目:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(机械工业出版社 《算法导论》P82 6.5-8) 这是网上找到一个解答:1.把每个已排序链表的第一个值取下,构建一个k个元素的最小堆。2.找到最小元素原来的链表,从中取下第二个元素,插入最小堆。3.接着找到当前最小元素原来的链表,从中取下下一个元素,插入...2011-09-12 13:09:34 · 395 阅读 · 0 评论 -
判断整数序列是不是二叉查找树的后序遍历结果
定义:二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树。[code="java"]/* * 判断给定序列是否为二叉查找树*/public class ...2010-12-22 13:04:04 · 165 阅读 · 0 评论
分享