algorithm
文章平均质量分 65
imck
做一个有思想的程序员
展开
-
链表排序
本题目来源于LeetCode,具体如下:Sort a linked list in O(n log n) time using constant space complexity. 题目要求复杂度O(nlogn),因此我们很自然考虑使用快速排序或者归并排序,但是后来经过实践证明,使用快速排序总是AC超时,归并排序则可以正确AC。分析一下原因,个人认为是 与测试数据有关,原创 2014-08-20 15:41:06 · 454 阅读 · 0 评论 -
二叉树的非递归遍历总结
一、前序遍历思路:原创 2014-09-29 11:11:26 · 618 阅读 · 0 评论 -
元查找树转双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BS原创 2014-10-03 11:47:40 · 380 阅读 · 0 评论 -
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10 / \原创 2014-10-03 15:19:33 · 1208 阅读 · 0 评论 -
用递归颠倒一个栈
用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。原创 2014-10-04 20:22:21 · 796 阅读 · 0 评论 -
最长公共子序列和最长公共字串总结
两个问题和相似,又经常被原创 2014-10-05 17:14:44 · 569 阅读 · 0 评论 -
[DP]Longest Increasing Subsequence
The longest Increasing Subsequence (LIS) problem is to find the length of the longest subsequence of a given sequence such that all elements of the subsequence are sorted in increasing order. For ex原创 2014-12-01 09:45:50 · 485 阅读 · 0 评论 -
[DP]Longest Common Subsequence
LCS Problem Statement: Given two sequences, find the length of longest subsequence present in both of them. A subsequence is a sequence that appears in the same relative order, but not necessarily con原创 2014-12-01 12:59:54 · 539 阅读 · 0 评论 -
最短编辑距离
https://web.stanford.edu/class/cs124/lec/med.pdf#include #include int min(int a,int b){ return a<=b ? a:b;}// X and Y index from 1int ed(char X[] ,int m, char Y[], int n){ int **dp = new原创 2014-12-01 15:04:22 · 396 阅读 · 0 评论 -
[DP]Min Cost Path
Given a cost matrix cost[][] and a position (m, n) in cost[][], write a function that returns cost of minimum cost path to reach (m, n) from (0, 0). Each cell of the matrix represents a cost to traver原创 2014-12-01 16:15:46 · 485 阅读 · 0 评论 -
最长上升子序列nlogn算法
定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元素。注意d中元素是单调递增的,下面要用到这个性质。首先len = 1,d[1] = a[1],然后对a[i]:若a[i]>d[len],那么len++,d[len] = a[i];否则,我们要从d[1]到d[len-1]中找到一个j,满足d[j-1]最终答案就是len利用d的单调性原创 2014-12-01 12:41:19 · 479 阅读 · 0 评论 -
[DP] 0-1 Knapsack Problem
Given weights and values of n items, put these items in a knapsack of capacity W to get the maximum total value in the knapsack. In other words, given two integer arrays val[0..n-1] and wt[0..n-1] whi原创 2014-12-03 17:54:20 · 699 阅读 · 0 评论 -
[CLRS] Problems 16-1: Coin changing
link http://ripcrixalis.blog.com/2011/02/08/clrs-chapter-16/Problems 16-1: Coin changingConsider the problem of making change for n cents using the fewest number of coins. Assume that each c转载 2014-12-10 11:13:24 · 3538 阅读 · 0 评论 -
[leetcode] Median of Two Sorted Arrays
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Given a sorted array A of len原创 2014-12-11 22:25:39 · 464 阅读 · 0 评论 -
排序算法总结
1. 简单选择排序 简单选择排序的思想:原创 2014-08-19 18:32:38 · 587 阅读 · 0 评论 -
Best data structure for dictionary implementation
http://stackoverflow.com/questions/10017808/best-data-structure-for-dictionary-implementationDepending on what you want to do, there are many good data structures.If you just want to store the words an转载 2015-03-11 15:15:16 · 555 阅读 · 0 评论 -
图的遍历
http://blog.csdn.net/cqnuztq/article/details/8955970概述 遍历分为深度优先遍历和广度优先遍历,其对有向图和无向图都适用。深度优先,顾名思义,就是只要存在后续节点就一直往下走,直到没有后续节点或者后续节点已经被访问输出了;广度优先,就是节点一层一层的输出。举个例子, 上面的两个图转载 2014-10-10 15:27:21 · 819 阅读 · 0 评论 -
【贪心算法】单源最短路径问题
一、 拓扑排序:算法si转载 2014-10-10 14:57:14 · 2459 阅读 · 0 评论 -
最长公共子串(Longest-Common-Substring,LCS)
这个LCS跟前面说的最长公共子序列的LCS不一样,不过也算是LCS的一个变体,在LCS中,子序列是不必要求连续的,而子串则是“连续”的。即:题:给定两个字符串X,Y,求二者最长的公共子串,例如X=[aaaba],Y=[abaa]。二者的最长公共子串为[aba],长度为3。本节给出三种不同的实现方式,并对比分析每种方法的复杂度,内容如下:==基本算法====DP方案=转载 2014-08-22 21:50:44 · 545 阅读 · 0 评论 -
查找第K大的元素
给定一个数组,找出这个数组的最小元素和最大原创 2014-08-22 17:09:55 · 828 阅读 · 0 评论 -
求自然数0-1000000中1出现的次数
求自然数0-1000000中1出现的次数。考虑六位字符000000-999999,共有字符 6位*1000 000个数=6 000 000个字符。0-9这是个字符等概率出现,因此0-9的个数都为6 000 000/10=600 000个。由于前导0不影响1-9的个数,因此自然数0-999 999中,1-9出现的次数均为6 000 000。加上1000000中的那个1,因此最终答案为600 00原创 2014-09-21 20:04:43 · 1076 阅读 · 0 评论 -
计算机笔试/面试题
【字符串】1、输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。2、有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面 (大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法。原创 2014-09-21 23:05:50 · 573 阅读 · 0 评论 -
字符串移位包含的问题(编程之美)
问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。原创 2014-09-21 20:26:12 · 500 阅读 · 0 评论 -
概率/随机数算法
0-1等概率问题问题描述一个随机数产生器以概率P生成0,以概率(1-P)生成1,怎样生成等概率的0和1?主要思路如果用这个产生器产生两个位,出现00的概率为P^2,出现01的概率为P(1-P),出现10的概率为P(1-P),而出现11的概率为(1-P)^2。故而可以用10表示1,01表示0,从而保证生成0和1的概率是相同的。代码实现int gener转载 2014-09-21 19:46:50 · 1601 阅读 · 0 评论 -
一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对
一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和cba。当时怎么想的忘记了,现在重新思考一下,文件的大小上限是10G,不可能在内存操作了。考虑设计一种hash使得如果两个字符串维相反串能得出相同的hash值,然后用该hash将文件中的字符串散列到不同的文件中,再在各文件中进行匹配。比如这样的hash函数对字符串上所有字符的ascii求和,因为长度在1K转载 2014-09-22 09:22:12 · 967 阅读 · 0 评论 -
删除两个双向链表值相同的结点
有双向循环链表结点定义为: struct node { int data; struct node *front,*next; }; 有两个双向循环链表A,B,知道其头指针为:pHeadA、pHeadB,请写一函数将两链表中data值相同的结点删除。原创 2014-09-22 12:48:36 · 1542 阅读 · 0 评论 -
幂集问题(组合问题)
求含N个元素的集合的幂集。 如对于集合A={1,2,3},则A的幂集为 p(A)={{1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},Φ}分析:可以用回溯法来解决,定义以原创 2014-09-22 13:44:39 · 1986 阅读 · 0 评论 -
N皇后问题
直接上码:#include using namespace std;void NQueens(int **a, int row, int n){ if(row <= n) { for(int col = 0; col < n; col++) { bool flag = true; // <判断同列上无冲突 for(int i = 0; i <= row; i+原创 2014-09-22 14:44:42 · 379 阅读 · 0 评论 -
树的遍历与图的遍历总结
树的先序遍历(非递归)/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * };原创 2014-09-24 21:59:38 · 980 阅读 · 0 评论 -
求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
int lis(int *a, int n){int *dp = new int[n];dp[0] = 1;int max_i = 0;int max_len = 1;for(int i = 1; i {dp[i] = 1;for(int k = 0; k {if(a[k] > a[i] && dp[k]+1>dp[i]) {dp[i] = dp[k原创 2014-10-06 15:50:37 · 1728 阅读 · 0 评论 -
求一个矩阵中最大的二维子矩阵(元素和最大)
转载:http://blog.csdn.net/zhanxinhang/article/details/6731134题:求一个矩阵中最大的n==2的二维子矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5转载 2014-09-28 22:42:48 · 1606 阅读 · 0 评论 -
有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除
双向循环链表结点定义为:struct node{ int data; struct node *front,*next;};有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除。原创 2014-09-29 09:25:34 · 1582 阅读 · 0 评论 -
Edit Distance
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a word:原创 2014-10-08 16:22:20 · 367 阅读 · 0 评论 -
向量空间模型
向量空间模型(Vector Space Model)是一个常用的相似度计算模型,lucene排序模型中使用了向量空间模型,下面结合搜索引擎排序过程中query和文档相关性计算来说明向量空间模型。搜索引擎可以为搜索请求的query返回一大堆相关的文档(通常是关键字匹配了的文档),但是需要对这些文档按与query的相关性进行排序。对于文档d,和query q,我们需要把它们表示成方便后续计算的一个原创 2015-05-05 14:08:27 · 4180 阅读 · 0 评论