算法
文章平均质量分 57
pipi666661
学习中。。。
展开
-
回溯的那些个算法
最近看算法,那些个回溯算法,总结起来可以一句话:撞了南墙就回头,回到撞墙以前的状态,总能找到路到罗马。既然到了罗马,我就知道来时的路。有点像《源代码》的情节,男主一死就往回,起死回生,再来一次,最后顺利找出凶手。经典的回溯比如八皇后,二叉树求和的路径,问题就不描述了,代码粘贴下,留个念想。八皇后#include #include #define N 8 int c原创 2013-11-13 17:33:58 · 654 阅读 · 0 评论 -
【单链表】curd-水浒英雄排行榜
学习了下韩总的算法课,自己记了下笔记,手敲了一下,很有感触。1、单链表的构造2、单链表的添加3、单链表的删除4、单链表的更新 单向链表完成英雄排行管理 查询英雄 添加英雄 删除英雄 修改英雄 <?php class Hero{ public $no;//排名 public $name;//名字 public原创 2013-12-09 13:19:45 · 550 阅读 · 0 评论 -
【栈】数组模拟栈的操作
用php实现的模拟栈的操作 使用数组来模拟栈的各种操作 <?php class MyStack{ private $top=-1;//默认是-1,表示该栈是空的 private $maxSize=5;//$maxSize表示栈的最大容量 private $stack=array(); //注意类里面的变量一定要用$this->xxx,不原创 2013-12-09 18:13:01 · 699 阅读 · 0 评论 -
【栈】实现高级计算器
实现一个计算器9+2*8-230+2*6-17*2-3*5-2 <?php// $exp=$_GET['exp'];// $exp='9+2*8-3'; //[人眼睛3+12-2 =>15-2=>13]// $exp='304+10*6-10'; $exp='71*2-50*3-3-67*6+80';//-333 $numsSta原创 2013-12-09 23:22:58 · 633 阅读 · 0 评论 -
【环形链表】丢手帕问题
小朋友丢手帕问题,小朋友的编号(1,2,...,n) ,从k号小朋友开始数,从1开始数到m,当数到m的小朋友出列(1以下是php的环形链表实现方法 约瑟夫问题 <?php class Child{ public $no; public $next=null; public function __construct($no){ $th原创 2013-12-09 17:17:36 · 594 阅读 · 0 评论 -
【双向链表】水浒英雄
双向链表可以解决的问题可以完成自我删除,效率相对高,不需要辅助结点 双向链表完成英雄排行管理 查询英雄 添加英雄 删除英雄 修改英雄 <?php //使用php的面向对象的方式来完成 class Hero{ public $pre=null;//表示指向前一个节点的引用 public $no; public $name;原创 2013-12-10 11:54:45 · 600 阅读 · 0 评论 -
【穷举】5 5 5 5 5=5填入操作符
填入合适的操作符使得 5 5 5 5 5=5可以填入+ - * / 不能添加括号。代码如下#include #include int main(){ char oper[]={' ','+','-','*','/'}; int i[5]; int sign=1,j,count=0; int num[]={0,5,5,5,原创 2013-12-05 13:03:06 · 3517 阅读 · 0 评论 -
重建二叉树
前序 a b d c e f中序 d b a e c f 重建二叉树,并打印后续 d b e f c a #include #include #define TREELEN 6struct NODE{ NODE* pLeft; NODE* pRight; char chValue; }; void R原创 2013-12-14 16:36:02 · 533 阅读 · 0 评论 -
【大数乘法】
大数乘法的思路:用数组或者字符串来实现大数的乘法,因为超出了单个数的存储限制,用字符串或者数组来模拟进位,保存结果#include #include using namespace std;void multiply(const char *a,const char *b); int main(){ string num1,num2; //原创 2013-12-17 17:04:04 · 557 阅读 · 0 评论 -
字符串压缩
压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。要求实现函数: void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr); 输入pInputStr: 输入字符串lInputLen: 输入字符串长度 输出 pOutp原创 2013-12-30 19:31:07 · 1764 阅读 · 1 评论 -
杨氏查找矩阵
1 2 53 4 76 8 9从左到右递增,从上到下递增。如果要查找元素应该如何查找。#includeusing namespace std;#define COL 3#define ROW 3bool Young(int a[][COL],int search){ int i =0,j = COL-1; int tmp = a[i][j];原创 2013-12-30 20:10:09 · 486 阅读 · 0 评论 -
【高精度求幂】
思路:思路类似大数乘法,因为计算机的double和float都有位数精度限制,所以我们只能转化成字符串来处理,最后结果也用字符串来保存。这是poj的1001题//Memory Time //1232K 0MS #include#includeusing namespace std;const int size=1000; //大数位数void mult(cha原创 2013-12-17 17:06:56 · 668 阅读 · 0 评论 -
【Cracking the coding interview】Q1.1(字符唯一)
读了Hawstein大神的大作,读书笔记记录之,膜拜大神用,给自己增些知识。Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?实现一个算法来判断一个字符串中的字符是否唯一思路:用最小的数原创 2013-12-23 17:34:12 · 693 阅读 · 0 评论 -
丑数
只包含因子2,3,5的数叫丑数,求从小到大顺序的第1500个丑数,例如6,8都是丑数,但14不是。因为它包含因子7。习惯上我们认为1是丑数。思路:丑数肯定是由丑数*2或3或5生成的。由空间换时间的做法。#includeusing namespace std;int Min(int num1,int num2,int num3){ int min=(num1原创 2013-12-27 17:36:24 · 497 阅读 · 0 评论 -
筛子法求质数
给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。#includeusing namespace std;//筛子法求质数 可以参考亲和数 //6~N的质数,打印两两质数为偶数的所有这些偶数//因为质数除开2以外都是奇数,那么大于6的偶数都是奇数,那么把6~N之间的质数都求出来,打印两两的和就可以了。 int main(){ cout <原创 2013-12-27 18:31:38 · 2084 阅读 · 5 评论 -
有些好玩的问题
1、1000瓶酒有1瓶有毒,请问最少用多少只老鼠来试,可以找出哪瓶有毒? 类似题目:你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果只能将金条切割两次,你怎样分给这些工人? 主要是考查二进制来表示数字问题。2、开关灯问题类似问题在过道上有100把上了锁的锁头。有一个人,第一次操作把这100把锁都打开了; 第二次操作,每隔1原创 2013-11-13 17:52:25 · 1607 阅读 · 0 评论 -
二叉树的深度遍历和广度遍历
#include #include #include #include #include using namespace std;#define Element char#define format "%c"typedef struct Node { Element data; struct Node *lchild; struct Node *rchil原创 2014-03-31 17:11:59 · 575 阅读 · 0 评论 -
数字三角形问题
给定一个由n行数字组成的数字三角形。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。并分析起计算复杂性。分析一个数字三角形宝塔,三角形中的数字是不超过100的整数。要从顶端走到底层,每一步可以向下或者右斜线向下走。如34 810 4 92 1 10 22 #include #include int m原创 2014-03-31 15:51:03 · 929 阅读 · 0 评论 -
约瑟夫问题之唐僧娶女汉子的故事
问题:约瑟夫玩过一个杀人的游戏,我多么期望第一个被杀的是我,想半天,我也许想明白了,我也许没想明天。约瑟夫第一个就杀我吧,求你了。下面是引用的约瑟夫问题“据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由原创 2013-11-13 17:24:25 · 759 阅读 · 0 评论 -
求1到N之间出现了几次数字x(x为1到9)
求1到N之间出现了几次数字x(x为1到9)思想:假设5位数n=abcde,看百位c出现x的次数为:ab=abcde/(100*10);cde=abcde-abcde/100*100当c<x时,那么count(c)的次数为:ab*100当c=x时,那么count(c)的次数为:ab*100+cde+1当c>x时,那么count(c)的次数为:(ab+1)*100原创 2013-11-14 22:03:25 · 2592 阅读 · 0 评论 -
【动态规划】求数组最大的子数组连续和
rt代码如下//求子数组的最大和//利用的是dp的思想,依次遍历数组中的每个元素,把他们相加,如果加起来小于0,则//把当前元素之和清为0,否则则和最大和比较,更新最大和,最后得到必是子数组的最大和//例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 #include#include原创 2013-11-13 18:01:30 · 1594 阅读 · 0 评论 -
【回溯】二叉树求和的所有路径
二叉树求和的所有路径,比如 例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7 则打印出两条路径:10,12和12,5,7#include#include#include using namespace std;static int sum(0);static int count(0);原创 2013-11-21 20:05:34 · 1999 阅读 · 0 评论 -
【回溯】全排列
实际上是一种深度优先的算法。回溯的思想:撞了南墙就回头,直到罗马,到了罗马一回头就是来时的路。#include using namespace std;void swap(int &a,int &b)//交换连个元素{ int tem; tem = a; a = b; b = tem;}int sum=0;void cal(int *a,原创 2013-11-21 20:11:56 · 958 阅读 · 0 评论 -
【排序】基数排序
基数排序又称桶排序。从低位开始排或者按高位开始排。第一步以LSD为例,假设原来有一串数值如下所示:73, 22, 93, 43, 55, 14, 28, 65, 39, 81首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:01 812 223 73 93 434 145 55 656原创 2013-11-14 16:49:07 · 655 阅读 · 0 评论 -
【回溯】八皇后
回溯方法#include #include #define N 8 int column[N+1]; int rup[2*N+1]; int lup[2*N+1]; int queen[N+1]={0}; int num; void backtrack(int); int main() { int i; num=0; for(i=1;i原创 2013-11-21 20:24:53 · 610 阅读 · 0 评论 -
算法学习小结
对最近学习算法的小结,学算法其实并不难,在于多思考,多想,多写,写多了就发现无非是那么几类。在此小作总结,以便以后能很快的回想起来。算法的基础,各种排序。排序的n种方法。各种排序算法:选择排序,冒泡排序,插入排序,快速排序,快速排序的随机方法,堆排序,希尔排序,二叉树排序,基数排序,计数排序不稳定的排序:选择排序,快速排序,堆排序,希尔排序算法的常用数据结构:链表,循环链表,队原创 2013-11-21 19:50:30 · 657 阅读 · 0 评论 -
【排序】快速排序 冒泡排序 选择排序
快排public class Quicksort { public int getMiddle(Integer[] list, int low, int high) { int tmp = list[low]; //数组的第一个作为中轴 while (low < high) { while (low tmp) { high--; } list[low原创 2013-11-21 21:52:45 · 542 阅读 · 0 评论 -
【分治】求逆序对个数并打印逆序对
如果用最hick的方法去求那么就是O(n^2)的复杂度,如果想优化的话,用归并排序的方法分治处理。主要思想:总逆序=左边逆序+右边逆序+左边右边分别排序后的逆序 #include#includeusing namespace std;//用归并排序的思想来求,归并排序为O(nlogn)的时间复杂度,比暴力的O(n^2)会好。 int merge(int *a, int原创 2013-11-14 14:28:36 · 2211 阅读 · 0 评论 -
不用加减乘除做加法
不用加减乘除做加法,那我们还能用啥,位运算吧!#includeusing namespace std;int add (int num1,int num2){ int sum,carry; do{ sum=num1^num2; carry=(num1&num2)<<1; num1=sum原创 2013-11-23 11:19:48 · 506 阅读 · 0 评论 -
亲和数
亲和数是一种古老的数。遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对亲和数。220=1+2+4+71+142=sum[284], 284=1+2+4+5+10+11+20+22+44+55+110=sum[220]这样220和284就是一对亲和数。原创 2013-11-22 21:17:50 · 1240 阅读 · 0 评论 -
全组合
1 2 3 4打印所有的数字组合12341 21 31 42 32 43 41 2 31 3 42 3 41 2 3 4#include #include using namespace std;vector result;void combination(int a[],int number,int inde原创 2013-11-25 01:09:11 · 510 阅读 · 0 评论 -
二叉树转双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表#include using namespace std;struct BSTreeNode{ int m_nValue; // value of node BSTree原创 2013-11-24 23:42:24 · 524 阅读 · 0 评论 -
求1+2+2+3+3+3+...+n+...+n的和
rt原创 2013-11-13 18:03:14 · 775 阅读 · 0 评论 -
括号匹配算法
没有去实现栈,使用c++中stl提供的stack来操作。算法描述if(遇到左括号){ 压栈}if(遇到左括号){ 弹栈 栈为空,弹栈失败 not match}if(stack.size()==0) matchelsenot match;#include#includeusing namespace std;原创 2013-11-13 21:50:34 · 2504 阅读 · 0 评论 -
骑士问题
大一时候写的骑士问题,今天翻出来加了点注释.主要的思想是:每次跳的地方是不容易到达的地方,这样更能接近解。#include#include#includeusing namespace std;static int a[8][8]={0};static int str[8][8]={8};static int x,y,i(0),k;static int row[8]原创 2013-11-13 23:14:35 · 1106 阅读 · 0 评论 -
求1+2+…+n(限制条件很变态 what the fuck!)
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。以下是三种方法,主要原理就是以其他的方法来实现循环,或者是递归。这里面比较巧妙的用到了构造函数,数组,全局变量。还有就是在不用if的情况下来构造true(1) false(0)!!n是一个很好的性质。下面的代码可以在dev c++直接使用。原创 2013-11-14 17:43:03 · 1014 阅读 · 0 评论 -
数组中随机选择n个数
php的话,已经实现了这个功能,直接用array_rand()就可以返回随机的数组下标了。然后打印出来就ok。<?phpfunction rand_me(array $a ,$n){ $rand_keys = array_rand($a, $n);return $rand_keys;}$input = array("hi", "hello", "test", "a",原创 2013-11-14 11:39:08 · 6900 阅读 · 0 评论 -
【单链表】反转
单链表反转的方法原创 2014-04-04 15:54:28 · 519 阅读 · 0 评论