算法
铭霏
这个作者很懒,什么都没留下…
展开
-
KMP算法——C++实现版
// KMP.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #define I_N_MAX 10000using namespace std;void KmpSearch(char[], char[], int[]);void GetNextval(char[], int next[]);int mai原创 2015-11-13 22:52:55 · 2493 阅读 · 2 评论 -
109. Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.按照中序遍历 自底向上递归(因为链表的顺序和中序遍历顺序相同)需要多想几遍/** * Definition for singly-linked list原创 2016-10-19 23:02:26 · 377 阅读 · 0 评论 -
热门智力题 过桥问题和倒水问题
热门智力题 过桥问题和倒水问题过桥问题和倒水问题都是笔试面试中的热门智力题,不但微软、GOOGLE、百度、腾讯等公司采用,甚至在IQ测试与公务员考试中都能见到。本文不但教你如何快速用手算来解决这两种问题,并且教你如何用程序代码来计算这两种问题。绝对让你大有收获。一.过桥问题在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸转载 2016-10-31 23:00:29 · 425 阅读 · 0 评论 -
最长公共子序列与最长公共子串(DP)
1. 问题描述子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串cnblogsbelong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列。最长公共子序列(Longest Common Subsequence,LCS),顾名思义,是指在所有的子序列中最长的那一个。子串是要求更严格的一种转载 2016-11-16 11:14:08 · 27123 阅读 · 2 评论 -
更简单的非递归遍历二叉树的方法
解决二叉树的很多问题的方案都是基于对二叉树的遍历。遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了。其递归遍历是人人都能信手拈来,可是在手生时写出非递归遍历恐非易事。正因为并非易事,所以网上出现无数的介绍二叉树非递归遍历方法的文章。可是大家需要的真是那些非递归遍历代码和讲述吗?代码早在学数据结构时就看懂了,理解了,可为什么我们一而再再而三地忘记非递归遍历方法,却始终记住了递归遍历方转载 2016-10-17 19:41:24 · 3750 阅读 · 1 评论 -
编辑距离
编辑距离是计算字符串相似度的常用算法先给出编辑距离的定义:设A和B是2个字符串,要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:(1)删除一个字符(delete);(2)插入一个字符(insert);(3)将一个字符改为另一个字符(substitute)原创 2017-02-21 21:49:05 · 452 阅读 · 1 评论 -
计算平方根近似法
一种通过迭代方式的快速计算平方根的算法原创 2017-02-25 20:20:14 · 2537 阅读 · 1 评论 -
Eratosthenes筛选法与欧拉筛选法(整理)
一、算法原理一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。二、步骤(1)先把1删除(1既不是质数也不是合数)(2)读取队列中当前最小的数2,然后把2的倍数删去(3)读取队列中当前最小的数3,然后把3的倍数删去(4)读取队列中当前最小的数5,然后把5的倍数删去.......(n)读取队列中当前最小的状态...原创 2017-05-08 15:43:19 · 6502 阅读 · 5 评论 -
LeetCode --- 89. Gray Code
题目如下:The gray code is a binary numeral system where two successive values differ in only one bit.Given a non-negative integer n representing the total number of bits in the code, print the seq转载 2016-10-15 16:13:17 · 445 阅读 · 0 评论 -
分布式集群中大数据的中位数
问题面试时经常被问到的一个问题:几万亿的数据分布到几千台网络连接的计算机中,怎么最少的数据交换,最快的速度找到这些数据的中位数?(备注:看看候选人是否愿意澄清题意,数据是什么类型?计算机是怎么连接的?顺便考考网络。)首先,看看什么是中位数。通用的定义是,给出一个排序好的列表,中间的那个元素就是中位数。比如,对有11个元素的排序好的列表[1 1 2 3 3 4 5 5 5 6 9],中位转载 2016-10-25 11:36:10 · 4045 阅读 · 0 评论 -
递归反转栈的顺序-------只使用常数量个变量
我们要反转一个栈,如果使用另外一个栈作为辅助的话,那么反转起来很简单,一个接一个push到辅助栈里再push回来就行了。那么假如不能使用辅助栈,数组等空间为O(n)的数据结构,只使用O(1)的空间复杂度即只能有常数个变量,怎么实现将栈反转?即原来的栈顶在栈底,栈底变成栈顶。 面试官提示我使用递归来考虑。当时我没有想出来……这道题使得我对递归算法的理解,感觉提升了一小下。转载 2016-09-28 18:54:45 · 873 阅读 · 0 评论 -
Floyd算法——C++实现版
// Floyd.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #define MAX_VALUE 1000#define MAX_VERTEX_COUNT 20 using namespace std;struct MGraph{ int *edges[MAX_VALUE]; int iVertexC原创 2015-11-16 16:40:51 · 7290 阅读 · 2 评论 -
Dijkstra算法——C++实现版
// Dijkstra.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #define MAX_VALUE 1000using namespace std;struct MGraph{ int *edges[MAX_VALUE]; int iVertexCount, iEdageCount;};voi原创 2015-11-16 21:18:29 · 966 阅读 · 1 评论 -
Bellman-Ford——C++实现版
// Bellman_Ford.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #define MAX_VALUE 1000using namespace std;struct Edge{ int Begin; int End; int Weight; int Pre;};struct MGraph原创 2015-11-18 12:34:19 · 1602 阅读 · 0 评论 -
栈模拟队列、队列模拟栈
为实现简便,假设栈不会溢出.1.两个栈模拟队列s1负责入队,s2负责出队.入队时:直接压入s1出队时:判断s2是否有元素,若有则弹出,若没有,则将s1倒入s2,再将s2栈顶弹出。若s1、s2均为空,则队列为空。#include #include #include using namespace std;//栈模拟队列void enqueue(stack *s原创 2016-01-06 18:04:06 · 488 阅读 · 0 评论 -
Dijkstra算法——C#实现版
Dijkstra算法的概念不再叙述,在这里把算法的实现记录一下。主要用于求源点到各点的最短路径。using System.Text;using System.Collections;using System;namespace Greedy{ class Marx { private int[] distance;原创 2015-01-28 02:57:31 · 3046 阅读 · 0 评论 -
计数排序、桶排序和基数排序
计数排序当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量内存。计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。但原创 2016-05-23 21:41:15 · 790 阅读 · 0 评论 -
Manacher's Algorithm 马拉车算法
字符串中求解最长回文串的O(N)解法在网上找了好几篇都感觉不是很理解,看到这篇慢慢的看终于明白了一些,所以记录下来 .原文地址:http://www.cnblogs.com/grandyang/p/4475985.html这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发转载 2016-05-09 15:06:55 · 1545 阅读 · 0 评论 -
水塘抽样(Reservoir Sampling)问题
在高德纳的计算机程序设计艺术中,有如下问题:可否在一未知大小的集合中,随机取出一元素?。或者是Google面试题: I have a linked list of numbers of length N. N is very large and I don’t know in advance the exact value of N. How can I most efficiently wr转载 2016-07-24 15:38:51 · 2095 阅读 · 0 评论 -
尾递归消除
以求4!为例基本递归:int fact(int n) { if(n return 0; else if(n==0) return 1; else if(n==1) return 1; else return n*fa转载 2017-07-06 18:33:59 · 1542 阅读 · 3 评论