每天一道LeetCode-----获取无重复项/有重复项序列的全排列

原题链接Permutations 要求是输出给定序列的全排列,序列中不包含重复元素 STL中有next_permutation函数可以获取当前序列的下一个排列,使用起来也很简单,先对序列按递增顺序排序,然后不断调用next_permutation函数获取当前序列的下一个更大的排列,如果没有...

2017-10-31 19:26:26

阅读数 904

评论数 0

每天一道LeetCode-----重新实现next_permutation

Next Permutation原题链接Next Permutation 重新实现next_permulation函数template <class BidirectionalIterator> bool next_permutation (BidirectionalIterat...

2017-10-30 12:57:46

阅读数 154

评论数 0

muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕

每一个成熟的项目都有大大小小的日志系统,在关键的地方打印日志信息,常用来跟踪程序运行,查找错误原因等,可以节省大量的debug时间muduo的日志信息有5个级别 TRACE,细粒度最高的日志信息,打印的最详细 DEBUG,细粒度级别上对调试有帮助的日志信息 INFO,粗粒度级别上强调程序的运行信息...

2017-10-29 18:48:34

阅读数 468

评论数 2

每天一道LeetCode-----给定字符串s和字符数组words,在s中找到words出现的位置,words内部字符串顺序无要求

Substring with Concatenation of All Words原题链接Substring with Concatenation of All Words 题目意思是给定字符串s和字符数组words,在s中寻找words出现的位置,words内部的字符串顺序没有要求此问题可...

2017-10-28 23:19:30

阅读数 473

评论数 0

muduo网络库学习(八)事件驱动循环线程池EventLoopThreadPool

muduo是支持多线程的网络库,在muduo网络库学习(七)用于创建服务器的类TcpServer中也提及了TcpServer中有一个事件驱动循环线程池,线程池中存在大量线程,每个线程运行一个EventLoop::loop。线程池的作用体现在 用户启动TcpServer服务器时创建大量子线程,每个子...

2017-10-28 16:16:38

阅读数 432

评论数 0

每天一道LeetCode----位运算实现加减乘除四则运算

Divide Two Integers原题链接Divide Two Integers 意思是重新实现除法运算,这里不要复习一下用位运算实现加减乘除四则运算 C++学习笔记—–用位运算实现加减乘除以前也有记录过,这里主要是复习,另外,除法需要优化,在这里实现加法通过异或运算和与运算实现 两...

2017-10-28 16:05:53

阅读数 526

评论数 0

muduo网络库学习(七)用于创建服务器的类TcpServer

目前为止,涉及到的绝大多数操作都没有提及线程,EventLoop,Poller,Channel,Acceptor,TcpConnection,这些对象的执行都是在单独线程完成,并没有设计多线程的创建销毁等。除了runInLoop函数仅仅提及了线程安全性,发现原来其实是有多个线程在同时运行的,也发现...

2017-10-27 17:05:55

阅读数 189

评论数 0

每天一道LeetCode-----KMP算法查找子串,重新实现strStr()函数

Implement strStr() 原题链接Implement strStr() 子串查找,方法很多,可以用string内置的接口find解决,这里主要复习一下kmp算法 kmp算法常用于字符串匹配,相比于传统方式一个一个查找,当遇到不匹配时从头开始的土方法,kmp可以有效减少比较...

2017-10-27 11:33:56

阅读数 1005

评论数 0

muduo网络库学习(六)缓冲区Buffer及TcpConnection的读写操作

在tcp的通信过程中,内核其实为tcp维护着一个缓冲区 当调用write/send时,会向内核缓冲区中写入数据,内核和tcp协议栈负责将缓冲区中的数据发送到指定<ip,port>的目标位置。 当有数据到达内核的tcp缓冲区中,如果开启了对套接字可读事件的监听,那么内核会让套接字变为可读...

2017-10-26 19:15:17

阅读数 1025

评论数 2

每天一道LeetCode-----删除序列中指定元素,将满足要求的元素移动到前面

Move Zeroes原题链接Move Zeroes 意思是给定一个数组,将所有的0都移到后面,不能改变非0元素的相对顺序 把非0元素移到前面,后面补零即可,比较简单class Solution { public: void moveZeroes(vector<int>...

2017-10-26 18:35:35

阅读数 188

评论数 0

muduo网络库学习(五)服务器监听类Acceptor及Tcp连接TcpConnection的建立与关闭

通常服务器在处理客户端连接请求时,为了不阻塞在accept函数上,会将监听套接字注册到io复用函数中,当客户端请求连接时,监听套接字变为可读,随后在回调函数调用accept接收客户端连接。muduo将这一部分封装成了Acceptor类,用于执行接收客户端请求的任务。类的定义如下,主要就是监听套接字...

2017-10-25 16:42:35

阅读数 466

评论数 3

每天一道LeetCode-----将链表每k个节点逆序一次

Swap Nodes in Pairs原题链接 Swap Nodes in Pairs 意思是将链表每两个节点互换位置,要求不能直接改变链表的值,只能改变next指针的方式交换 其实就是遍历一遍每两个交换即可,方法比较随意/** * Definition for singly-linke...

2017-10-25 11:41:15

阅读数 400

评论数 0

每天一道LeetCode-----合并两个/多个有序链表为一个新链表

Merge Sorted Array原题链接Merge Sorted Array 意思是给定两个有序数组,将其合并成一个有序数组,存在nums1中。如果先只是简单合并成一个新数组,然后将新数组赋值给nums1,基本就算完成了。现在考虑不适用其它内存空间,在nums1上原地合并新数组。 遇到...

2017-10-24 15:32:38

阅读数 622

评论数 0

muduo网络库学习(四)事件驱动循环EventLoop

muduo的设计采用高并发服务器框架中的one loop per thread模式,即一个线程一个事件循环。 这里的loop,其实就是muduo中的EventLoop,所以到目前为止,不管是Poller,Channel还是TimerQueue都仅仅是单线程下的任务,因为这些都依赖于EventLo...

2017-10-24 14:58:03

阅读数 639

评论数 1

muduo网络库学习(三)定时器TimerQueue的设计

Linux下用于获取当前时间的函数有 time(2) / time_t (秒) ftime(3) / struct timeb (毫秒) gettimeofday(2) / struct timeval (微秒) clock_gettime(2) / struct timespec (纳秒) 定时...

2017-10-23 22:27:34

阅读数 477

评论数 0

muduo网络库学习(二)对套接字和监听事件的封装Channel

muduo对描述符fd,需要监听的事件events,当fd被激活调用的可读/可写/关闭/错误回调函数进行了封装,实现在Channel类中,Poller监听的其实就是一个个Channel对象,Channel可以向Poller注册自己关心的事件,当被激活后调用相应的回调函数。类似libevent的st...

2017-10-23 19:23:34

阅读数 345

评论数 0

muduo网络库学习(一)对io复用的封装Poller,面向对象与基于对象

高效并发的网络框架大多离不开io多路复用函数,Linux下有三种 select poll epoll 关于三者的区别可以参考 linux网络编程—–几种服务器模型及io多路复用函数 前段时间看Libevent源码时也学习过对epoll/poll/select的封装,但是毕竟c语言写的库,是通过函...

2017-10-23 18:34:46

阅读数 404

评论数 2

每天一道LeetCode-----括号匹配

Valid Parentheses 意思是判断是否满足匹配关系,使用栈遍历一遍即可class Solution { public: bool isValid(string s) { std::stack<char> st; for(int i ...

2017-10-23 13:36:06

阅读数 1011

评论数 0

每天一道LeetCode-----删除链表倒数第n个节点

原题链接Remove Nth Node From End of List 意思是给定一个链表,要求删除倒数第n个节点,返回链表头,复杂度在O(n)思路就是找到倒数第n个和倒数第n+1个节点即可,仅仅遍历一遍链表的话只需要记录这两个节点。 一个节点指向当前遍历到的节点,记录和链表头的距离,如...

2017-10-22 12:41:27

阅读数 407

评论数 0

每天一道LeetCode-----平面木桶最大容量,以较小的纵坐标为高,横坐标差为底

原题链接Container With Most Water 意思是有n个坐标点,横坐标是索引,纵坐标给出,从每个点向x轴做垂线,求最大面积蛮力法将所有情况都判断一遍复杂度在O(n2),两层for循环。 优化的话,可以考虑使用动态规划,dp[i][j]表示从i到j这个范围最大的面积,但是后来...

2017-10-20 16:41:07

阅读数 207

评论数 0

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