07 2019 档案

摘要:非递归写法: 对一个节点来说,当遍历它时,要求它的右子树已经遍历完。 因此,为了判断当前节点到底需不需要遍历,引入pLast为上一次遍历的节点。 当pCur->right==pLast||pCur==NULL时,说明右子树已经遍历完了,应该遍历该节点了。 否则,说明该节点右子树尚未遍历,将右子树的根 阅读全文
posted @ 2019-07-24 18:19 李湘沅 阅读(196) 评论(0) 推荐(0) 编辑
摘要:还有一个月左右就要秋招了,从3月份到现在看了很多书,也瞎走了很多路,时间只剩下一个月,也不准备看新的书了,好好复习下这几个月的东西。 1.数据结构: a).好好再过一遍书本,常见的数据结构及算法好好再过一次,巩固一下。 b).剑指OFFER+Leetcode上做过的题,特别是剑指offer的题,经典 阅读全文
posted @ 2019-07-24 15:47 李湘沅 阅读(122) 评论(0) 推荐(0) 编辑
摘要:KMP算法第一次看起来稍微有点复杂,其实原理还是很简单的,想清楚就理解了。 举个简单的栗子: 主串s:abcabfd 模式串t:abcabe 如果使用比较原始的方法,一个个字符进行比较,当进行到主串的i=5,s[5]=f的位置,发现与j=5,t[5]=e不匹配,则只能重新从i=2开始,与j=1再进行 阅读全文
posted @ 2019-07-23 17:54 李湘沅 阅读(319) 评论(0) 推荐(0) 编辑
摘要:对于一个网站页面来说,不同的页面被访问的可能性不同,像主页被访问的概率是最大的。 如果利用这个特点,对高访问概率的页面存入缓存,这样每次连接过来就不用每次都要经历本地找文件,打开这样一个过程。 对于这个缓存的设计,首先考虑: 1.主页一定是一直在缓存中的。 2.用一个哈希表来建立filename > 阅读全文
posted @ 2019-07-19 22:43 李湘沅 阅读(205) 评论(0) 推荐(0) 编辑
摘要:https://yq.aliyun.com/articles/495842?spm=a2c4e.11153940.0.0.61cf4d40BBz2x2 首先上转帖,这篇文章讲的很透彻了。 ET与LT触发的区别: 红线:fd状态改变是才会触发。那么什么情况会导致fd状态的改变呢? 对于读取操作: (1 阅读全文
posted @ 2019-07-16 22:55 李湘沅 阅读(1159) 评论(0) 推荐(0) 编辑
摘要:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [3,3,5,0,0,3,1,4]输出: 6 思路: 首先,有一点最 阅读全文
posted @ 2019-07-15 11:35 李湘沅 阅读(115) 评论(0) 推荐(0) 编辑
摘要:1.为什么引入非阻塞IO+IO多路复用: 以accept为例:accept等待连接时,陷入阻塞,而在阻塞期间相当于服务器是没有在工作的。 以read为例:当当前处理的socket中已无数据,但对端的数据尚未到达时,此时调用read,陷入阻塞,而在阻塞期间如果有其他客户端发起请求,是无法连接到服务器的 阅读全文
posted @ 2019-07-13 22:28 李湘沅 阅读(295) 评论(0) 推荐(0) 编辑
摘要:给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则: 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明: 如果不存在这样的转换序列,返回一个空列表。所有单词具 阅读全文
posted @ 2019-07-12 14:56 李湘沅 阅读(284) 评论(0) 推荐(0) 编辑
摘要:首先关于条件变量的引入: 假想在这样的情况下,多个线程需要等待某个条件才能继续工作(如生产者消费者模型中,消费者需要等待流水线上有产品后才能消费),如果只使用互拆锁,则多个线程要不停的查询流水线是否为空这个状态,并且查询这个操作需要加入临界区,因为流水线不仅同时有多个消费者,还有生产者在生产,不加锁 阅读全文
posted @ 2019-07-11 21:35 李湘沅 阅读(4674) 评论(1) 推荐(3) 编辑
摘要:https://www.cnblogs.com/doit8791/p/7461479.html https://www.jianshu.com/p/7e023dd5fb79 阅读全文
posted @ 2019-07-11 18:55 李湘沅 阅读(164) 评论(0) 推荐(0) 编辑
摘要:还是太菜了,第一次做到图的题目,一开始习惯性的想到DFS,后来发现跑出来超时,超时的点在: 1.DFS是一个个的把与之相邻的某个i节点遍历完后在遍历另一个相邻的j节点,而BFS是按层次遍历的,即先遍历完与之相邻的一层,然后再遍历相邻一层的下一层,这样BFS只要找到某个节点符合要求,就一定是最短的(因 阅读全文
posted @ 2019-07-11 11:30 李湘沅 阅读(344) 评论(0) 推荐(1) 编辑
摘要:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回符合要求的最少分割次数。 示例: 输入: "aab"输出: 1解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串 与131题目类似,但是用递归的话在某些测例上会超时,因此考虑使用dp 使用dp,首先考 阅读全文
posted @ 2019-07-09 16:47 李湘沅 阅读(195) 评论(0) 推荐(0) 编辑
摘要:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说 阅读全文
posted @ 2019-07-08 10:06 李湘沅 阅读(174) 评论(0) 推荐(0) 编辑
摘要:多进程版本相对也很简单,父进程负责接收和转换套接字,接收后Fork出子进程去处理页面请求和返回所需求的页面。 首先是父进程: 父进程Accept后不对请求进行处理,而是直接关闭所连接的套接字 这是因为for后,父子进程间的文件描述符只是拷贝,他们都指向同一个套接字,对父进程来说,这个主动套接字是多余 阅读全文
posted @ 2019-07-06 21:55 李湘沅 阅读(240) 评论(0) 推荐(0) 编辑
摘要:Leetcode136: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 时间O(n),空间O(1)的算法实在没想到,满脑子里都是排序或者引入map。 看了下答案巧妙的运 阅读全文
posted @ 2019-07-06 10:37 李湘沅 阅读(143) 评论(0) 推荐(0) 编辑
摘要:直接在leetcode上做的,牛客上把词典wordDict改成了哈希表,懒得改了,牛客上的就没写。 思路: table[i][j]代表从字符串s的i到j位置([i,j])是否能为一个词典中的单词,为1表示可以,为0表示不行。 e.g. 首先初始化table表,即初始化table[0][x],在词典中 阅读全文
posted @ 2019-07-04 15:47 李湘沅 阅读(370) 评论(0) 推荐(0) 编辑
摘要:用递归的话这两个题是很简单的。 在非递归的情况,使用迭代做这个两个题目,两个题目间的联系是很紧密的。 首先是LeetCode144,前序遍历二叉树: 前序遍历的顺序为:根,左,右。 对这个顺序下,很容易想到使用一个栈即可完成遍历,流程有: 1).根节点入栈 2).读取根节点出栈 3).右节点与左节点 阅读全文
posted @ 2019-07-03 11:22 李湘沅 阅读(240) 评论(0) 推荐(0) 编辑
摘要:最简单版本的WebServer: 1.服务端初始化工作: a).创建主动套接字:initList(port) b).转为监听套接字:initList(port) c).等候和接受连接:Accept(listenfd,&clientaddr,&sizeof(clientaddr)); 2.处理客户端的 阅读全文
posted @ 2019-07-01 22:58 李湘沅 阅读(338) 评论(0) 推荐(0) 编辑