- 博客(13)
- 收藏
- 关注
原创 进程与线程的区别
进程:进程就是正在运行程序的抽象描述,也是系统资源分配和调度的独立单元。可以将进程想象作一个容器,该容器里装有运行某个程序所需的上下文,上下文是由程序正确运行该程序所需的状态组成的。这些状态包括存放在内存中的程序的代码和数据,栈,寄存器,程序计数器,环境变量以及打开的文件描述符等。线程:线程是CPU调度和分派的基本单位,同一进程中的多个线程共享该进程的地址空间和其他资源。这些资源包括但不局限于打开...
2018-05-08 20:28:13
215
原创 并发与并行
并发:是指在时间上重叠的逻辑流。在单核处理器上各逻辑流并不是真正意义上的并行,只是内核提供给我们的错觉,好似我们这条逻辑流正独占CPU。为了更好理解,见下图:假设内存中有A,B,C,D四道程序,各自拥有自己的逻辑控制流。在单核处理器中,只有一个物理程序计数器,因此在每个程序运行时,它的逻辑程序计数器被装入实际的程序计数器(pc,保存着CPU要执行的下一条指令所在的内存地址)中,运行一段时间后,或该...
2018-05-02 13:47:37
303
原创 互斥量实现
互斥量是一个可以处于两态之一的变量:加锁和解锁,这意味着一个二进制位就可以表示他,但在实现中,常常使用一个整型变量,0表示解锁,而其他所有的值表示加锁。互斥量使用两个过程。1.当一个线程或者进程想要访问临界区时,它调用mutex_lock。如果该互斥量当前是解锁的,此调用成功,该线程进入临界区。另外,如果该互斥量已经加锁,调用线程将被阻塞,直到持有该锁的线程释放锁。如果多个线程阻塞在该互斥量上,将...
2018-04-27 23:44:53
1727
原创 一致性哈希
我们在讲解一致性哈希前,先来了解缓存的应用场景,这样,我们才能理解得更为透彻,而不是看完转眼就忘。假设我们现在手头上有两台服务器,分别为A,B,用来存储文件2,文件3,文件4,文件5。我们希望这几个文件均匀分布在两台服务器上,以便缓解服务器压力并提升查询速度。同学们都知道这时应该用哈希,用哈希函数对缓存服务器的数量进行取模操作,这样我们就可以用这个结果来决定这些文件分别放在哪些服务器上。用到的公式...
2018-04-26 23:17:02
274
原创 Leetcode:Container With Most Water 最大水容器
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two ...
2018-04-22 20:05:05
389
原创 Leetcode:Palindrome Number 回文数字
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.Example 1:Input: 121 Output: true Example 2:Input: -121 Output: false Explanation: F...
2018-04-22 15:28:35
252
原创 Leetcode: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.Example 1:Input: "babad" Output: "bab" Note: "aba" is also a valid answer. Example 2:...
2018-04-22 15:09:47
206
原创 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.' 表示。思路:很明显,每遍历一个数,都要查看是否满足条件1,2,3,既然如此,创建三个二维数组,分别保...
2018-04-20 15:16:31
342
原创 map下标操作符
map是C++ STL中非常好用的关联容器,在我们的代码中,可以非常方便的运用下标操作符[]来操作它。但是搞技术不能浅尝辄止,不仅要会用,还得知道其原理。不过其原理略为复杂,底层实现RB_tree不仅在树形的平衡上表现不错,具有稳定的对数平均时间O(lgn)的表现,在实现复杂度上也是惊人,这就导致了map迭代器的自增,自减,下标操作等非常复杂。下面是下标操作符的实际操作:template <...
2018-04-20 13:07:32
2639
原创 leetcode:只出现一次的数字
给定一个整数数组,除了某个元素外其余元素均出现两次。请找出这个只出现一次的元素。 备注: 你的算法应该是一个线性时间复杂度。 你可以不用额外空间来实现它吗? 初看这个题目,也许大部分同学的思路是保存各个元素出现的次数,然后找出出现次数为1的元素。 但其实还有种更简单的方法,那就是用到位运算之异或的特性:n ^ n = 0 代码如下: class S
2018-04-19 18:20:41
1162
原创 两个数组的交集 II
给定两个数组,写一个方法来计算它们的交集。 例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2]. 注意: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 思路:对于这种题型,我的第一个思路就是遍历nums2,看nums1中是否有元素与其相等,若相
2018-04-19 18:09:20
776
原创 leetcode:买卖股票的最佳时机 II
题目: 假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。 设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。 思路:贪心算法,总是做出在当前看来是最好的选择,不从整体最优上加以考虑,也就是说,只关心当前最优解 代码如下: class Solution {
2018-04-19 17:17:22
7963
原创 leetcode:从排序数组中删除重复项
题目要求:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 可能大部分会C++的同学看到这个题目的第一反应就是用到STL中的set关联容器。确实,set非常方便,其底层实现RB_Tree保证了set各项操作的时间复杂度为O(lgn
2018-04-19 16:46:37
373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅