自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法题之二分查找

文章目录1、搜索旋转排序数组&在排序数组中查找元素的第一个和最后一个位置题目分析①目标明确②另一种思路:排除法③避免死循环总结2、寻找重复数题目分析复杂度1、搜索旋转排序数组&在排序数组中查找元素的第一个和最后一个位置题目分析这题很明显是需要使用二分法的,这里顺便将二分法的使用做下总结。①目标明确使用二分法的步骤不外乎找到左右端点,然后取中间端点,再根据情况将左或右端点变成中间端点。这里一定要先理清什么情况将左端点变为中间端点,什么情况将右端点变为中间端点。②另一种思路:排

2020-07-30 21:11:41 5555

原创 算法题之数组

文章目录小总结1、旋转矩阵(中)题目分析解法1解法2扩展复杂度2、三数之和题目分析复杂度3、下一个排列题目分析复杂度4、搜索旋转排序数组&在排序数组中查找元素的第一个和最后一个位置题目分析①目标明确②另一种思路:排除法③避免死循环总结5、盛最多水的容器和数对和题目分析复杂度6、删除排序数组中的重复项题目分析复杂度7、只出现一次的数字I&II & 数组中数字出现的次数题目分析复杂度复杂度复杂度8、合并区间题目分析复杂度9、移动零题目分析复杂度10、旋转数组的最小数字题目分析复杂度11、

2020-07-30 11:59:21 468

原创 算法题之回溯算法

文章目录1、组合总和题目分析回溯剪枝去重复杂度2、全排列&第K个排列题目分析3、子集题目分析4、分割回文串题目分析1、组合总和题目分析回溯这题需要使用回溯的方法来解题,对这个所谓回溯算法,我个人的理解是依次尝试,要配合递归,在递归前把数据放入vector,递归结束后再将加入vector的数据取出,然后进行下一次循环。剪枝这里还用到了剪枝,即在递归前先判断下当前的数是否还符合条件,如不符合就直接跳过,这样可以省去一些步骤。去重还有一个问题就要去重,比如如果candidates中包含

2020-07-23 17:53:40 609

原创 算法题之位运算

文章目录1、颠倒二进制位题目分析复杂度1、颠倒二进制位题目分析参考:link此题是相当标准的一道位运算题目,只要理清其中的逻辑,剩下的就很简单了,代码如下: uint32_t reverseBits(uint32_t n) { uint32_t ret=0; for(int i=31;i>=0;--i){ ret|=((n>>(31-i))&1)<<i; } ret

2020-07-23 17:53:18 643

原创 算法题之动态规划

文章目录1、股票2、完全平方数3、零钱1、股票2、完全平方数3、零钱

2020-06-23 11:09:02 276

原创 算法题之树

文章目录小总结1、平衡二叉树分析复杂度小总结二叉树一般先考虑下前中后序遍历的方法,而后就是DFS和BFS。1、平衡二叉树分析这题有两种解法:1)从顶至底:构造一个获取当前节点最大深度的方法 depth(root) ,通过比较此子树的左右子树的最大高度差abs(depth(root.left) - depth(root.right)),来判断此子树是否是二叉平衡树。若树的所有子树都平衡时,此树才平衡。2)从底至顶:对二叉树做先序遍历,从底至顶返回子树最大高度,若判定某子树不是平衡树则 “剪枝”

2020-06-16 10:39:38 474

原创 算法题之哈希表

文章目录1、字母异位分组题目分析复杂度1、字母异位分组题目分析本题可以维护一个map,保存字符串和在vector中的下标,难点在于怎么去确认字符是否在这一数组中。关键在于存在map中的string,这里我们存在里面的应该排序后的字符串,然后把传入的每个字符串先保留一个副本,然后排序了后在map中count。复杂度时间复杂度:O(n)空间复杂度:O(n)...

2020-06-16 10:39:26 674

原创 算法题之优先搜索

文章目录1、水域大小题目分析复杂度2、二叉树中的最大路径和题目分析复杂度1、水域大小题目分析我觉得这个题目可以归类下,就是给一个二维数组,然后需要遍历一遍找出一片区域。这种题基本可以分三步:1、创建一个book数组,记录找过的区域。2、进入dfs,设立dir_x、dir_y,进行探索,找出目标点。3、进行边界、是否合适和book判断。复杂度时间复杂度 O(N)空间复杂度 O(N)2、二叉树中的最大路径和题目分析首先这题审题要严,他要找的是从任意结点出发能到达的路径,也就是说

2020-06-16 10:39:12 287

原创 算法题之栈

文章目录1、每日温度(单调栈)题目分析复杂度2、下个更大元素Ⅰ/Ⅱ题目分析复杂度关于单调栈:关键词:下一个,上一个,最近,更大,更小如果要找数组中比当前值大的最近值,就用单调递减栈,反之就用单调递增栈。这里需要注意相等的情况,视题目而定,看说的是大于还是不小于。1、每日温度(单调栈)题目分析这题其实如果想到用单调栈了的话就不难了,构建一个单调递减栈从后往前遍历,然后为了求距离还需要一个map来记录温度所在的位置。如果当前的温度比栈顶温度高就出栈,一直到栈为空或者找到比当前温度更高的温度为止

2020-06-16 10:38:48 548

原创 算法题之字符串

文章目录1、最长回文子串题目分析复杂度1、最长回文子串题目分析首先可以使用暴力法,双指针遍历,但时间上堪忧。再来就是动态规划,状态转移方程如下所示:dp[i][j] = (s[i] == s[j]) and dp[i + 1][j - 1]注:①「动态规划」事实上是在填一张二维表格,由于构成子串,因此 i 和 j 的关系是 i <= j ,因此,只需要填这张表格对角线以上的部分。②看到 dp[i + 1][j - 1] 就得考虑边界情况。边界条件:如果子串 s[i + 1.

2020-06-16 10:38:32 709

原创 算法题之链表

文章目录1、合并两个有序链表题目复杂度复杂度2、合并K个排序链表题目分析复杂度3、旋转链表题目分析复杂度1、合并两个有序链表题目复杂度这题有两种方式解决,递归和迭代。首先来说迭代,这是我首先想到的,要注意的点如下:1、首先保证l1的首值比l2小,因为最后要返回的是l1。 if(l2->val<l1->val){ swap(l1,l2); }2、因为这里涉及将下一个节点赋给当前节点,所以一定要注意检查当前节点是否存在。

2020-06-16 08:51:46 240

原创 Linux高性能服务器编程学习笔记(五)

程序框架1、服务器模型1)C/S模型2)P2P模型2、服务器编程框架3、两种高效的事件处理模式1)Reactor模式(同步I/O)2)Proactor模式(异步I/O)3、模拟Proactor模式1)同步和异步I/O2)使用同步I/O模拟Proactor模式4、两种高效的并发模式1)半同步/半异步模式原型半同步/半反应堆模式高效半同步/半异步模式2)领导者/追随者模式句柄集线程集事件处理器和具体的事件处理器工作流程1、服务器模型1)C/S模型采用C/S模型的TCP服务器和TCP客户端的工作流程如下图所

2020-06-15 15:17:58 161

原创 Linux高性能服务器编程学习笔记(四)

I/O复用1、select2、poll3、epoll1)内核时间表2)epoll_wait3)LT和ET模式4、三种方法比较5、补充1)select的通常流程代码流程图解缺点2)epoll设计思想功能分离代码就绪列表创建epoll对象维护监视列表接收数据阻塞和唤醒1、selectinclude <sys/select,h>int select( int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct ti

2020-06-15 15:16:53 184

原创 Linux高性能服务器编程学习笔记(三)

高级I/O1、pipe2、dup和dup23、readv和writev4、sendfile5、mmap和munmap6、splice7、tee8、fcntl1、pipepipe函数可用于创建一个管道,以实现进程间通信。#include< unist.h>int pipe( int fd[2])通过pipe函数创建的这两个文件描述符fd[0]和fd[1]分别构成管道的两端,往fd[1]写入的数据可以从fd[0]读出。并且,fd[0]只能用于从管道读出数据,fd[1]则只能用于往管道写入

2020-06-15 15:16:39 114

原创 Linux高性能服务器编程学习笔记(二)

网络编程基础API1、socket地址API字节序1)大小端2)转换函数2、通用socket地址3、IP地址的转换函数4、socket的创建5、socket的命名-bind6、socket的监听-listen7、接收连接-accept8、发起与关闭连接1)连接-connect2)关闭-close9、数据读写1)TCP2)UDP10、socket选项11、网络信息API1)获取信息2)getaddrinfo1、socket地址API字节序1)大小端字节序分为大端字节序( big endian)和小端字

2020-06-15 15:16:28 237

原创 Linux高性能服务器编程学习笔记(一)

协议族1、封装1)TCP2)UDP3)IP4)帧2、ARP协议3、DNS工作原理4、IP模块5、TCP状态转移1)转移过程总览2)TIME_WAIT状态1、封装应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装,如下图所示:1)TCP经过TCP封装后的数据称为TCP报文段( TCP message segment),或者简称TCP段。TCP协议为通信双方维持一个连接,并且在内

2020-06-15 15:16:15 262

空空如也

空空如也

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

TA关注的人

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