- 博客(21)
- 收藏
- 关注
原创 153. Find Minimum in Rotated Sorted Array QuestionEditorial Solution
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).Find the minimum element.You may assume no duplicate exists in
2016-08-09 14:33:26 290
原创 42. Trapping Rain Water
https://leetcode.com/problems/trapping-rain-water/1. 首先我们遍历数组,找到数组中的最高点2. 然后我们分两次遍历,从左到最高点,从右到最高点3. cur 代表左边最高点,如果右边比它小,那么可以剩水。如果右边比它大,那么更新cur的值。4. 如3所示,不过是从右边开始遍历。~~~~~~ 感谢大神能够提供如此简单易懂的解法
2016-08-08 09:50:16 289
转载 背包问题之0/1背包,完全背包,多重背包,混合背包
P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1
2012-12-01 10:33:24 1056
原创 杭电2602
#include #include using namespace std;int dp[1002][1002];int p[1024];int w[1024];int main(){ int n,v; int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&v); for(int i=1; i<=n; i+
2012-11-28 19:36:25 1064
原创 动态规划之johnson流水线调度
双机流水作业调度问题的Johnson算法n个作业要在由两台机器M1和M2组成的流水线上完成加工. 每个作业i必须先在M1上然后在M2上加工, 时间分别为ai和bi确定这n个作业的加工顺序, 使得从第一个任务开始在M1上加工到最后一个任务在M2上加工完成的总时间尽量小.流水线作业调度问题要求确定这n个作业的最佳加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在M2加工完
2012-11-19 16:50:54 2598
转载 C++标准转换运算符dynamic_cast
C++标准转换运算符dynamic_castdynamic_cast (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static_c
2012-11-15 21:21:42 470
转载 C++标准转换符之reinterpret_cast
C++标准转换运算符reinterpret_castreinterpret_cast (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了
2012-11-15 20:52:41 766
转载 C++标准转换符之static_cast
C++标准转换运算符static_caststatic_cast (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Pack
2012-11-15 20:37:25 486
转载 C++标准转换符之const_cast
C++标准转换运算符const_cast前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的
2012-11-15 20:17:49 611
原创 boost之scoped_ptr和auto_ptr
scoped_ptr的构造函数接受一个类型为T*的指针p,创建出一个scoped_ptr对象并在内部保存指针参数p。p不许是一个new表达式动态分配的结构或者为NULL,在对象生命期结束时,析构函数~scoped_ptr会使用delete操作符自动销毁所保存的指针对象,从而正确的回收资源。scoped_ptr同时把拷贝构造函数和赋值操作符都声明为私有,禁止对智能指针的赋值操作,保证被它管理的指
2012-11-14 15:26:01 1308
原创 Linux之广播和多播
最近学习Linux网络编程学到了广播与多播,就在这做点笔记。其中一些原理我就不介绍了,我觉得学习Linux网络编程,TCP/IP三卷还是基础,是需要好好看看。广播的服务器端 :#include //#include #include #include #include #include #define BUFLEN 255void getcurtime(char *cur
2012-11-09 19:47:17 1025 2
原创 递归算法之全排列
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。 1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。 2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3
2012-11-09 15:33:55 795
原创 递归与分治之棋盘覆盖
《计算机算法设计与分析》第三版递归与分治章节中有一类棋盘覆盖问题。在一个2^k * 2^k个方格组成的棋盘中,若恰好有一个方格与其他方格不同,则称该方格为一个特殊方格,显然在特殊方格在棋盘上出现的为止有4^k种情形。因而对任何k>=0,有4^k种不同的特殊棋盘。 有上图四种不同
2012-11-08 11:01:40 756
原创 递归与分治之整数划分
《计算机算法设计与分析》第三版递归与分治章节 有一个整数划分问题。将正整数n表示成一系列正整数值和: n = n1+n2+....+nk。正整数n的这种表示称为正整数的n的划分。正整数n的不同的划分个数称为正整数的n的划分数,将最大加数记作m,记作p(n,m)。例如:6; a5+1; b
2012-11-07 21:24:20 727
原创 贪心算法之最小生成树Kruskal
求最小生成树有两种算法prim和kruskal。 前者适合于稠密图,它是根据节点到周围节点的最短路径来求的的。前面已经介绍过,本人也认为它编程思想比较简单适合于初学者。而kruskal根据边数来求的的,它始终取当前最小边加入,所以它适合于稀疏图,当边数非常多时,它就会很复杂。很多数据结构书上都讲过这种贪心思想,这种思想还好理解,但是要将它具体写成程序还是有一些难度的,我想按照prim算法的思想
2012-11-07 16:48:00 838
原创 Linux之并发多线程服务器-2
从上面我们可以实现多线程服务器,但是我们在实现复杂功能时,要注意避免使用静态变量和同步问题。Linux系统中提供了线程特定数据(TSD)来取代静态变量。它类似于全局变量。但是是各个线程私有的,它以线程为界限。TSD是定义线程私有数据的唯一方法。同一进程中的所有线程,他们的同一特定数据项都由一个进程内唯一的关键字 KEY来标志。用了这个关键字,线程可以存取线程私有数据。在线程特定数据中通常使用
2012-11-06 20:55:53 586
原创 Linux之并发线程服务器
使用Linux多进程服务器,这些年虽说使用很好,但使用fork生成子进程存在一些问题。首先,fork占用大量的资源,内存映像要从父进程拷贝到子进程,所有描述符要在子进程中复制等等。虽然当前采用写时拷贝(copy -on-write)技术,将真正的拷贝推迟到子进程有写操作时,但fork任然需要占用大量资源。其次,fork子进程后,需要进程间通信(IPC)在父子进程间传递信息。由于子进程从一开始就有父
2012-11-05 21:26:30 634
原创 Linux之并发进程服务器
服务器按处理方式可以分为迭代服务器和并发服务器两类。迭代服务器每次只能处理一个客户的请求,他实现简单但效率很低,通常这种服务器被称为迭代服务器。然而在实际应用中,不可能让一个服务器长时间地为一个客户服务,而需要器具有同时处理多个客户请求的能力,这种同时可以处理多个客户请求的服务器称为并发服务器,其效率很高却实现复杂。Linux系统主要提供3种方式支持并发: 进程,线程 以及 I/O多路复用
2012-11-05 16:51:47 663
原创 贪心算法之最小生成树prim与单源最短路径dijkstra
相信很多数据结构书上都讲了两种有关“最小生成树”的算法求解,两种都是基于贪心算法。其中prim算法是适合于稠密图,他的基本思想是从一个节点开始,沿着它的边寻找最短路径的边,并将其并入到开始节点中去,然后再次从开始节点以及刚刚并入的节点的边中寻找”最短路径“并入其中,然后依次循环。。。。其中的原理很简单,很多数据结构的书上都讲过,但是其中的代码对于初学者还是比较困难的(比如我),我再网上找了很多
2012-11-04 14:24:50 4265 1
原创 编译最新版boost_1_51_0
boost简介: Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达
2012-11-02 11:20:44 1369
转载 优先队列详解
优先级队列区别于普通队列的一点是:优先级队列如果插入的节点是结构体类型,则要在结构体中重载比较操作符函数。示例代码如下:[cpp] view plaincopy//优先级队列的使用测试 //优先级队列跟对列的使用方式的区别是优先级队列在插入元素时 //在将元素插入队尾后还要根据比较值对该元素进行位置的调整 #include
2012-10-18 14:27:09 996
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人