自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

转载 将数组分成两部分,使得这两部分的和的差最小

将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小。比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小。思路:这个问题可以转化为求数组的一个子集,使得这个子集中的元素的和尽可能接近sum/2,其中sum为数组中所有元素的和。这样转换之后这个问题就很类似0-1背包问题了:在n件物品中找到m件

2017-03-28 17:35:32 26594 3

原创 494. Target Sum 和 416. Partition Equal Subset Sum

You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.Find out

2017-03-10 11:00:26 412

转载 select、poll、epoll之间的区别总结[整理]

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用

2017-03-08 17:32:46 274

转载 5. Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.分析:采用中

2017-03-02 17:14:46 384

转载 免费陷阱的问题--动态规划

免费馅饼Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 28835    Accepted Submission(s): 9848Problem Description都 说天上不会掉馅饼,但有一天g

2017-03-28 15:30:42 714

原创 Python UnicodeDecodeError: 'gbk' codec can't decode byte 0xe9

在使用Python 3.5版本编码的过程中,直接open(filename,’r’),总是报错:Python UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xe9但是在用Python2.7版本的时候却什么错误都没有 解决方案: 在头文件中增加import codecs 然后将open(filename,’r’),改成:codecs.op

2017-03-25 20:42:14 4621

原创 利用数组实现的堆排序

void HeapSort(int a[],int n){ int i; for(i = n/2; i > 0; i--){//构建初始堆 HeapAdjust(a,i,n); } for(i = n; i > 1; i--){//不断输出最大元素进行排序,输出后继续调整 swap(a,1,i); HeapAdjust(a,1,i-1); }}void HeapA

2017-03-22 13:38:10 1544 1

转载 最大滑动窗口

参考:http://blog.csdn.net/ssjhust123/article/details/7967489http://codercareer.blogspot.com/2012/02/no-33-maximums-in-sliding-windows.htmlhttp://leetcode.com/2011/01/sliding-window-maximum.html

2017-03-22 12:03:21 365

转载 什么是死锁及死锁的必要条件和解决方法【转】

进程死锁及解决办法操作系统 2009-09-24 16:48:58 阅读767 评论1   字号:大中小 订阅 一、要点提示(1) 掌握死锁的概念和产生死锁的根本原因。(2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。(3) 记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想。(4) 掌握

2017-03-17 20:57:50 567

转载 进程与线程的通信方式

一、进程间的通信方式# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机

2017-03-17 12:21:15 447

原创 链表刷题总结-技巧以及注意事项

技巧:1.插入头节点的技巧,诸如:删除链表中重复节点的题,反转链表某个区间的题等,通过插入头节点,可以使得对头节点的操作同后面节点的操作一样;2.设置一快一慢指针,诸如:判断一个链表是否有环,有环环的入口点,链表的快速排序(通过求中间节点,然后merge,递归实现的快速排序)等

2017-03-13 20:04:31 1221

转载 NAT外网访问内网方法,内网端口映射外网ip

由于公网IP地址有限,不少ISP都采用多个内网用户通过代理和网关路由共用一个公网IP上INTERNET的方法,这样就限制了这些用户在自己计算机上架设个人网站,要实现在这些用户端架设网站,最关键的一点是,怎样把多用户的内网IP和一个他们唯一共享上网的IP进行映射!就象在局域网或网吧内一样,虽然你可以架设多台服务器和网站,但是对外网来说,你还是只有一个外部的IP地址,怎么样把外网的IP映射成相应的内网

2017-03-13 18:07:07 11410

转载 C++四种强制转换

C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是stat

2017-03-13 17:59:47 347

转载 C++拷贝构造函数详解

一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100;  int b = a;   而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-

2017-03-13 17:50:37 231

转载 C++实现顺序栈的基本功能

栈是限定仅在表头进行插入和删除操作的线性表,有着先进后出的特点(FILO);现在我来动手实现栈的基本本功能练练手;定义栈的头文件如下:[cpp] view plain copy#ifndef CSTOCK_H_  #define CSTOCK_H_    const int STOCK_SIZE = 100;//定

2017-03-13 17:32:36 994

转载 C++运算符重载讲解与经典实例

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex {  public:   complex(double r=0.0,double I=0.0){real=r;imag=I;}   void display();  private:   double real;   dou

2017-03-13 17:25:28 320

转载 C++模板:函数模板和模板函数

1.函数模板的声明和模板函数的生成1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。函数模板的声明形式为:template(参数表){    函数体}其中,template是定义模板函数的关键字;template后面的

2017-03-13 17:18:30 374

转载 C++抽象类

一、纯虚函数定义.     纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”二、引入原因:1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 

2017-03-13 17:15:35 520

转载 各种排序算法的总结和比较

1 快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排序数列。快速排序比大部分排序算法

2017-03-13 13:14:34 1005

转载 归并排序的实现

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plain copy

2017-03-13 13:02:12 281

转载 C++ 智能指针详解

C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p

2017-03-13 10:26:19 212

转载 变量定义和声明的区别(整理)

变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空

2017-03-09 18:32:27 574

转载 select,poll,epoll比较

select,poll,epoll简介 select select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大3 对socket进行扫描时是线性扫描 

2017-03-08 17:36:40 251

转载 排序算法——桶排序

桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。      例如要对大小为

2017-03-08 13:03:37 235

转载 Linux C++的多线程编程

1. 引言  线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。  为什么有了进程的概念后,还要再引入线程呢

2017-03-08 12:34:48 284

转载 select函数详解及实例分析

Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻

2017-03-08 10:21:49 264

转载 socket中accept()函数的理解

如果客户端有连接请求,必须使用下述函数来接受客户端的请求。SOCKET accept(       SOCKET               s,       struct sockaddr FAR  *addr,       int FAR          *addrlen);    addr用于存放客户端的地址,addrlen在调用函数时被设置为addr指向区域的长度

2017-03-08 09:57:42 27043 3

转载 从浏览器访问一个地址的过程

1.若DNS缓存中没有相关数据,则IE浏览器先向DNS服务器发出DNS请求:  这一过程的目的是获取www.sina.com这个域名所对应的IP地址;  IE浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文;  DNS模块将生成的DNS报文传递给传输层的UDP协议单元;  UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元;

2017-03-07 22:53:01 3705 1

转载 关于构造函数 和 析构函数 能否抛出异常的讨论

构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程。当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存、创建内部对象和打开相关的外部资源,等等。而当对象死亡时,析构函数负责关闭资源、释放内部的对象和已分配的内存。在对象生死攸关的地方,如果程序代码出现问题,常常会发生内存泄漏,从而产生可能危害系统运行的孤魂野鬼。大量的事实表明,业务逻辑代码写得非常严谨

2017-03-07 22:15:59 488

转载 C++中的static关键字的总结

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include

2017-03-07 19:55:45 201

转载 操作系统之页面置换算法

下面原理来源:http://c.biancheng.net/cpp/html/2614.html地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。1.最佳置换算法(OPT)(理想置换算法):从

2017-03-07 09:44:53 1179

转载 一步一图一代码,一定要让你真正彻底明白红黑树

一步一图一代码,一定要让你真正彻底明白红黑树 作者:July   二零一一年一月九日-----------------------------本文参考:I、  The Art of Computer Programming Volume III、 Introduction to Algorithms, Second EditionIII、The An

2017-03-06 10:24:14 608

转载 linux内核分析——CFS(完全公平调度算法)

1.1 CFS原理    cfs定义了一种新的模型,它给cfs_rq(cfs的run queue)中的每一个进程安排一个虚拟时钟,vruntime。如果一个进程得以执行,随着时间的增长(也就是一个个tick的到来),其vruntime将不断增大。没有得到执行的进程vruntime不变。    而调度器总是选择vruntime跑得最慢的那个进程来执行。这就是所谓的“完全公平”。为了区别不

2017-03-06 09:40:51 1103

原创 线程与进程的区别与联系

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。在多线程OS中,线程是能独立运行的基本单位,因而

2017-03-03 18:05:41 14133 1

转载 TCP/IP 相关知识点与面试题集

第一部分:TCP/IP相关知识点对TCP/IP的整体认链路层知识点IP层知识点运输层知识点应用层知识点(这些知识点都可以参考:http://www.cnblogs.com/newwy/p/3234536.html)第二部分:常见面试题TCP协议和UDP协议的区别是什么TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接

2017-03-03 17:44:22 761

转载 115. Distinct Subsequences--动态规划的方法

题目Given a string S and a string T, count the number of distinct subsequences of T in S.A subsequence of a string is a new string which is formed from the original string by deleting some (can

2017-03-02 16:39:36 484

原创 和为s的连续正数

题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序

2017-03-02 16:02:34 201

原创 72. Edit Distance

编辑距离概念描述:编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。 问题:找出字符...

2017-03-02 13:57:42 253

原创 67. Add Binary

Given two binary strings, return their sum (also a binary string).For example, a = “11” b = “1” Return “100”. 直接相加string addBinary(string a, string b) { int lena = a.length() - 1; i

2017-03-02 13:32:26 243

原创 58. Length of Last Word

Given a string s consists of upper/lower-case alphabets and empty space characters ’ ‘, return the length of last word in the string. If the last word does not exist, return 0. Note: A word is define

2017-03-02 13:10:39 197

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除