数据结构与算法
胖大海瘦西湖
乐观,积极进取
展开
-
火车进站 一个入栈序列的所有出栈顺序
题目描述给定一个正整数N代表火车数量,0输入描述:有多组测试用例,每一组第一行输入一个正整数N(0输出描述:输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。输入例子:31 2 3输出例子:1 2 31 3 22 1 32 3 13 2 1#inclu原创 2017-06-21 19:40:52 · 3172 阅读 · 0 评论 -
最小堆
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇/* 说明: 1、堆数组的下标从0开始; 2、下标为i的父结点的下标为(i-1)/2,其子节点为2*i+1以及2*i+2; 3、最后一个叶子节点(下标为i-1)的父节点为(n-1-1)/2即n/2-1. */#include #include using namespace std;void M转载 2017-07-20 14:51:36 · 369 阅读 · 0 评论 -
快速排序
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;int partition(vector &vi,int start,int end){//包含end int temp=vi[start]; while(start<end){ while(end>转载 2017-07-20 11:38:43 · 220 阅读 · 0 评论 -
归并排序
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void merge(vector &vi, int start, int mid, int end, vector &vitp){ int k=0;//注意:这个k每次调用merge时都从0开始 int i=sta转载 2017-07-20 10:39:54 · 316 阅读 · 0 评论 -
直接选择排序
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void directselectsort(vector &vi){ if(vi.size()<=1) return ; int n=vi.size(); for(int i=0;i<n-1;++i){//当选择转载 2017-07-20 10:38:07 · 219 阅读 · 0 评论 -
Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).You may assume that the intervals were initially sorted according to their start times.E原创 2017-06-27 16:32:18 · 263 阅读 · 0 评论 -
KMP算法思考
参考链接:KMP 算法(1):如何理解 KMP KMP算法详解//// kmp.cpp// algorithm//// Created by soybeanmilk on 2017/6/11.// Copyright © 2017年 soybeanmilk. All rights reserved.//#include #include using names原创 2017-06-12 00:49:58 · 264 阅读 · 0 评论 -
遍历一遍找到第一个出现一次的字符
题目描述找出字符串中第一个只出现一次的字符 输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1输入例子:asdfasdfo输出例子:o使用map记录字符出现的次数,使用vector记录只出现一次的元素及其次序,在删除重复的元素的同时保持先后次序,最终返回v原创 2017-06-22 13:48:14 · 560 阅读 · 0 评论 -
成绩排序
题目描述查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter原创 2017-06-22 00:55:06 · 372 阅读 · 0 评论 -
矩阵乘法计算量估算
编写程序计算不同的计算顺序需要进行的乘法次数 输入描述:输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则输出描述:输出需要进行的乘法次数输入例子:350 1010 2020 5(A(BC))输出例子:3500//3 50 10 1原创 2017-06-22 00:05:23 · 2387 阅读 · 0 评论 -
全排列
/*#include #include using namespace std;vector vib;vector vires;void dfs(vector &vi,int ct){ if(ct>=vi.size()){ for(auto ieh: vires) cout<<ieh<<" "; cout<<endl;原创 2017-07-20 19:10:50 · 283 阅读 · 0 评论 -
二叉树小结
typedef struct BiTNOde{ ElemType data; //数据域 struct BiTNode *lchild,*rchild; //左、右孩子指针}BiTNode,*BiTree;//先序遍历(PreOrder)void PreOrder(BiTree T){ if(T!=NULL){ visit(T); PreOrder(T->lchil原创 2015-03-21 17:30:02 · 1209 阅读 · 0 评论 -
LRU算法 C++实现
整体思路:一个循环队列同时使用节点的计数来标记节点的新旧信息,如果有新节点加入时,就把最旧的节点清空,将新节点加入。具体画一下图比较好理解。#include #include #include #include using namespace std;static const int LEN = 5;int main(){ vector vires(LEN,-1);//原创 2017-09-01 09:15:11 · 2949 阅读 · 0 评论 -
深入理解红黑树
对于红黑树的原理与算法,推荐大家看这个博客:红黑树(一)之 原理和算法详细介绍在这里,我想写一些自己的体会,在变色、旋转过程中,是如何使树满足红黑树的规则的。请结合上面那个博客阅读。插入情况1:插入情况2:插入情况3:删除的情况(4种):原创 2017-08-26 08:30:30 · 401 阅读 · 0 评论 -
BFPRT实现
这里自己实现了一下BFPRT算法,并与别人的实现版本进行效率对比,以及与C++标准库中的sort排序后选取top-k进行效率对比。发现,C语言版本的效率更高一些,在数据量不是海量数据时,sort的速度竟然比BFPRT要快。//// BFPRT.cpp// NowCoder//// Created by soybeanmilk on 2017/7/22.// Copyright原创 2017-07-22 16:52:33 · 361 阅读 · 0 评论 -
shell排序及两种优化
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void shellsort(vector &vi){ if(vi.size()<=1) return ; int n=vi.size(); for(int step=n/2;step>0;step/=2){转载 2017-07-20 09:14:03 · 589 阅读 · 0 评论 -
冒泡排序及2种优化方法
原博客:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include //#include //size_tusing namespace std;void bubble(vector &vi){ if(vi.size()==0) return ; int n=vi.size();//还是不要用size_t了,要不然,(s转载 2017-07-19 23:41:48 · 359 阅读 · 0 评论 -
插入排序及2种优化
原文:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇#include #include using namespace std;void insertsort(vector &vi){ if(vi.size()<=1) return ; int n=vi.size(); for(int i=1;i<n;i++){ int转载 2017-07-20 00:45:36 · 259 阅读 · 0 评论 -
矩阵链乘法
#include #include using namespace std;void print(vector &vcname, vector> &virecord, int b, int e){//包含e if(b==e) cout<<vcname[b]; else{ /* cout<<"("; print(原创 2017-07-23 11:37:12 · 326 阅读 · 0 评论 -
24点游戏
参考链接:速算24点上面的链接里的代码是不允许计算中出现小数,这也是题目的要求,所以,那个代码对于“5 5 5 1”这个组合是没法计算出正确结果的。我把程序改为能计算"5 5 5 1"之类的需要出现小数的情况,以及能输出相应的表达式,这里只输出一种可能的表达式。/*题目规定整个计算过程中都不能出现小数,所以下面的代码能过。但是对于5,5,5,1是不能得到正确结果的,原因在于这里用的原创 2017-07-19 10:09:09 · 350 阅读 · 0 评论 -
二叉搜索树
#include #include using namespace std;typedef struct node{ int data; struct node* lchild; struct node* rchild;} Node,*pNode;void insert_sbt(pNode &T, int data){ if(T==NULL){原创 2017-07-18 14:23:17 · 157 阅读 · 0 评论 -
图论算法小结
图论算法小结//邻接矩阵存储结构定义如下://邻接矩阵包含两种数组:顶点表和边表#define MaxVertexNum 100 //顶点数目的最大值typedef char VertexType; //顶点的数据类型typedef int EdgeType; //带权图中边上权值的数据类型typedef struct{ VertexType Vex[MaxVe原创 2015-03-12 16:48:24 · 5229 阅读 · 2 评论 -
计算数学表达式
/*计算表达式的值*///例如输入:1-2.2*5+4/(5+6)-7*8#include#include#include////////////////////////////////////////////////////////////////////////////////////////////////////定义数据结构#define MaxSize 50typedef原创 2017-03-11 23:53:22 · 570 阅读 · 0 评论 -
scala 回溯法解决八皇后问题
object EightQueen extends App{ val queenArray = new Array[Int](8) var num = 0 def printqueen(){ for(i <- 0.until(8);j <- 0.until(8)){ if(j == queenArray(i)) print('*') else print('-') if(j原创 2016-09-13 12:07:01 · 976 阅读 · 0 评论 -
scala 深搜法解决八皇后问题
object EightQueen2 extends App{ val pos = new Array[Int](8) val rowvisited = new Array[Boolean](8) val colvisited = new Array[Boolean](8) val maindiagonalvisited = new Array[Boolean](15) val coun原创 2016-09-13 17:48:37 · 779 阅读 · 0 评论 -
scala 广度优先搜索解决迷宫问题
//广度优先搜索:一般是搜索一路最短路径,并不搜索出所有路径,也不搜索出所有最短的路径object MiGong3 extends App{ import scala.collection.mutable.ArrayBuffer val migong = Array( Array(1,1,1,1,1,1,1,1,1,1), Array(1,0,0,1,1原创 2016-09-14 18:46:49 · 736 阅读 · 0 评论 -
scala 回溯法解决迷宫问题
//回溯法(递归版本)object MiGong extends App{ import scala.collection.mutable.ArrayBuffer val migong = Array( Array(1,1,1,1,1,1,1,1,1,1), Array(1,0,0,1,1,0,0,1,0,1), Array(1,0,0,原创 2016-09-14 18:43:55 · 429 阅读 · 0 评论 -
spark scala Apriori
val mydata = Array(Array(1,3,4,5),Array(2,3,5),Array(1,2,3,4,5),Array(2,3,4,5))val pamydata = sc.parallelize(mydata)val C1 = pamydata.flatMap(_.toSet).distinct().collect().map(Set(_))val D = mydata原创 2016-08-18 10:36:58 · 1903 阅读 · 0 评论 -
查找与排序小结
//顺序查找//主要是为了说明引入"哨兵"的作用typedef struct { //查找表的数据结构 ElemType *elem; //元素存储空间基址,建表时按实际长度分配,0号单元留空 int TableLen; //表的长度}SSTable;int Search_Seq(SStable ST,ElemType key){ //顺序表ST中顺序查找键字为key的元素。若找原创 2015-03-14 11:35:21 · 1924 阅读 · 0 评论 -
由先序序列和中序序列生成一棵二叉树
#include#include#includetypedef struct BiTNode{ char e; struct BiTNode *lchild,*rchild;}BiTNode;void preOrderTravse(BiTNode *T1){ if(T1){ printf("%c",T1->e); preOrde原创 2015-02-17 14:32:06 · 3101 阅读 · 0 评论 -
高效率的取幂运算
#includeint IsEven(int n){ if(n%2) return 0; else return 1;}long int Pow(long int X,unsigned int N){ if(N == 0) return 1; if(IsEven(N)) return Pow(X*X,N/2); else return Pow(X,N-1)*原创 2014-02-27 13:04:06 · 739 阅读 · 0 评论 -
scala 动态规划解决0-1背包问题
object BeiBao extends App{ val num = 5 val volumn = 100 val thing = Array((92,77),(22,22),(87,29),(46,50),(90,99)) //(价值,重量) // val volumn = 10 // val thing = Array((6,2),(3,2),(5,6),(4,5),(6,4))原创 2016-09-16 22:39:49 · 438 阅读 · 0 评论 -
scala 回溯法解决0-1背包问题
object BeiBao_huishuo extends App{ val num = 5 val volumn = 100 val thing = Array((92,77),(22,22),(87,29),(46,50),(90,99)) //(价值,重量) // val volumn = 10 // val thing = Array((6,2),(3,2),(5,6),(4,5原创 2016-09-17 08:42:11 · 451 阅读 · 0 评论 -
由数字式子生成对应的二叉树
/*由式子生成二叉树*///例如输入:1-2*3+4/(5+6)-7*8##include#include////////////////////////////////////////////////////////////////////////////////////////////////////定义数据结构#define MaxSize 50typedef struct{原创 2014-11-30 20:18:59 · 1210 阅读 · 0 评论 -
花生米(二)
NOJ 1083 花生米(二)时限:1000ms 内存限制:10000K 总时限:3000ms 描述:五一长假第二天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(这个仓库还真奇怪)。这次Tom制定分花生米规则如下: 1、Tom和Jerry轮流从堆中取出k粒花生米吃掉,k可以是1,5,10中的任意一个数字; 2、为显示规则的公平性,Jerry转载 2016-10-20 13:40:54 · 725 阅读 · 0 评论 -
花生米(五)
原博客:花生米5花生米(五)时限:1000ms 内存限制:10000K 总时限:3000ms描述:五一长假第六天,Tom在QQ上遇到了Kitty。呵呵,Kitty,在离散数学课上认识的PPMM……等等!Tom恍然大悟:自己这一生除了看帖不回之外最大的错误就是离散数学没学好! 五一长假第七天,Tom和Jerry在仓库散步的时候发现了一堆花生米(仓库,呵呵,仓库…)。这次Tom转载 2016-10-21 09:08:07 · 1133 阅读 · 0 评论 -
花生米(四)
原博客:花生米41085.花生米(四)时限:1000ms 内存限制:10000K 总时限:3000ms描述五一长假第四天,Tom逛了N个bbs,做了N^2个脑筋急转弯题,终于发现了每次吃完花生米嘴里都是苦味的原因:自己总会吃到最后一粒花生米。 五一长假第五天,Tom和Jerry在仓库散步的时候发现了n堆花生米(这是什么仓库啊?!)。这次Tom制定分花生米规则如下: 1、首转载 2016-10-21 09:06:05 · 507 阅读 · 0 评论 -
花生米(三)
原博客:花生米(三)花生米(三)时限:1000ms 内存限制:10000K 总时限:3000ms描述:五一长假第三天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(仓库,又见仓库……)。这次Tom制定分花生米规则如下:1、Tom和Jerry轮流从堆中取出k粒花生米吃掉;2、第一次取花生米的人只能取一粒,以后取花生米的数量不能超过前一个人取花生米数量的两倍;3、转载 2016-10-20 15:24:03 · 524 阅读 · 0 评论 -
花生米(一)
原博客:花生米11082.花生米(一)时限:1000ms 内存限制:10000K 总时限:3000ms描述Tom和Jerry是邻居,他们都喜欢吃花生米。Tom的信条是“规则永远由强者制定,弱者只有遵守的权力”;Jerry则深信“头脑比拳头更有力量”。除此之外,他们都很聪明,恩,至少有211工程大学本科生水平。 五一长假第一天,Tom和Jerry在仓库散步的时候发现了一堆花生米转载 2016-10-21 08:59:08 · 579 阅读 · 0 评论 -
python 递归程序中对象的浅拷贝与深拷贝
参考这个博客最长公共子序列(LCS)问题,写出了C++版的找出所有最大公共子序列的代码,然后我需要将这个代码用python实现一个,按照C++的逻辑,写出来后,但是最终的结果死活不正确,最后发现问题在于:递归过程中,递归变量在python中仅有一份,递归分支不能很好的保持过程中的状态量,需要对象的深拷贝。#coding=utf8#python3.5import copyMAX=10原创 2016-10-22 09:49:26 · 1198 阅读 · 0 评论