每天一道LeetCode-----重排链表,节点顺序是从头取一个,从尾取一个,从头取一个,从尾取一个.....

Reorder List原题链接Reorder List要求将链表重新排序,有图片示例可以看到,规则是从头取一个,再从尾取一个,再从头取,从尾取,…,这样进行下去既然每次都从两个不同的地方取节点,那么可以将原链表从中间拆分成两个链表,一个链表是从原链表头到中间节点,另一个链表是从原链表表尾到中间节...

2018-01-31 13:17:50

阅读数 180

评论数 0

每天一道LeetCode-----判断链表是否有环,如果有,找到环的入口位置

Linked List Cycle原题链接Linked List Cycle判断一个链表是否有环,空间复杂度是O(1)如果不考虑空间复杂度,可以使用一个map记录走过的节点,当遇到第一个在map中存在的节点时,就说明回到了出发点,即链表有环,同时也找到了环的入口。不适用额外内存空间的技巧是使用快慢...

2018-01-30 13:57:47

阅读数 6571

评论数 2

每天一道LeetCode-----将字符串切分成若干单词,使得每个单词都在给定的字典中,求出所有的切分结果

Word Break 原题链接Word Break 给定一个字符串和单词字典,将字符串切分成若干个单词,使每个单词都在字典中。判断是否可以成功切分 假设字符串s[0 : n-1]可以成功切分成若干个单词,那么一定存在一个i使得s[0 : i-1]可以成功切分成若干个单词,同时s[i : ...

2018-01-29 14:42:12

阅读数 1471

评论数 0

每天一道LeetCode-----复制一个带有随机节点的链表

Copy List with Random Pointer 原题链接Copy List with Random Pointer 深拷贝一个链表,链表节点的成员包括 指向下一个节点的指针 指向一个随机节点的指针 节点值 主要的影响在随机节点的拷贝,处理不好会引发递归拷贝,解决方法是采...

2018-01-28 14:07:40

阅读数 63

评论数 0

每天一道LeetCode-----一个整数序列,每个元素出现两次,只有一个(两个)出现一次,找到这个(这两个)元素

Single Number 原题链接Single Number 一个整数序列,每个数字都出现两次只有一次数字出现了一次,找到只出现一次的那个数字 位运算的异或算法有如下几个性质 值相同的两个数字异或结果为0,即a ^ a = 0 交换律,即a ^ b = b ^ a 综上两条性质,得...

2018-01-27 12:14:38

阅读数 686

评论数 0

每天一道LeetCode-----分糖果问题

Candy原题链接Candyn个孩子站成一排,分糖果。ratings[i]表示第i个孩子的等级,要求 每个孩子至少有一个糖果 高等级的孩子分得的糖果要高于相邻的低等级的孩子分得的糖果 计算最少需要的糖果数初始时每个孩子一个糖果可以满足,相邻孩子的糖果数量需要从两方面考虑首先,保证高等级的孩子分得的...

2018-01-26 11:38:03

阅读数 859

评论数 0

每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周

Gas Station原题链接Gas Station加油站问题,判断是否能够从一个加油站开始行走环绕一周,其中gas[i]表示在第i个加油站可以获得的油量,cost[i]表示从第i个加油站到达第i+1个加油站所需的油量如果gas[i] >= cost[i],那么可以说在加油站i处是盈利的那么...

2018-01-25 11:32:34

阅读数 138

评论数 0

每天一道LeetCode-----复制无向图

Clone Graph原题链接Clone Graph复制一个无向图遍历一遍图就可以了代码如下/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector...

2018-01-24 12:46:26

阅读数 99

评论数 0

每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数

Palindrome Partitioning原题链接Palindrome Partitioning对字符串进行切分,使得切分出的每个子串都是回文串,返回所有的切分可能对于每个字符都可能在它的位置切分,所以可以容易想到使用深度优先和回溯法求解。另外,为了避免重复判断,采用动态规划的思想记录某个字符...

2018-01-23 21:38:22

阅读数 547

评论数 0

每天一道LeetCode-----找到所有被某个字符包围的另一个字符

Surrounded Regions原题链接Surrounded Regions给定一个二维方格,每个格子上只有’X’和’O’两种字符,要求将所有被’X’包围的’O’都变为’X’如果直接求解,那么对于一个字符’O’而言,判断它是否能够被’X’包围是不太容易的事情。那么转换一下思路,可以找到所有不能...

2018-01-22 11:39:01

阅读数 78

评论数 0

STL源码学习(一)迭代器概念与traits编程技法

STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。这种胶着剂便是迭代器,迭代器设计的目的在于可以方便的获取(遍历)容器中的数据同时又不暴露容器的内部实现。比如说,当使用一个链表迭代器时,使用者根本不会知道数据在链表中是如何存储的。这带来的好处是,所有的S...

2018-01-21 13:04:39

阅读数 60

评论数 0

每天一道LeetCode-----计算二叉树所有根节点到叶子节点的和

Sum Root to Leaf Numbers原题链接Sum Root to Leaf Numbers二叉树每个从根节点到叶子节点的路径都代表一个整数,计算所有整数的和只需要遍历一遍整棵数即可,需要注意必须是到达叶子节点代码如下/** * Definition for a binary tre...

2018-01-21 13:03:25

阅读数 362

评论数 0

Redis源码剖析(十三)整数集合

Redis提供一种叫整数集合的数据结构,当数据中只包含整数,并且数据数量不多时,Redis便会采用整数集合存储Redis保证整数集合有以下几个特性 所含元素全是整数,且不重复 内部元素有序,通常是会从小到大排序 内部编码统一,尽可能采用合适的编码保存数据 当编码不合适时,执行升级操作 接下来会针对...

2018-01-20 14:18:46

阅读数 106

评论数 0

Redis源码剖析(十二)有序集合跳表实现

有序集合是Redis对象系统中的一部分,其底层采用跳表和压缩列表两种形式存储,在上一篇介绍了跳表实现,就趁热打铁看一下有序集合的跳表实现本篇主要涉及的是有序集合添加数据的命令,后面会看到,在命令的底层实现中,实际上还是调用跳表的接口存储结构有序集合的定义在server.h文件中,不过除了跳表以外,...

2018-01-20 11:17:35

阅读数 199

评论数 0

每天一道LeetCode-----计算最长的元素连续序列长度

Longest Consecutive Sequence原题链接Longest Consecutive Sequence给定一个序列,寻找最长的连续元素序列,对于示例而言,给定的序列中存在1,2,3,4这四个元素,所以最长的连续元素序列的长度为4要求就是给定类似的序列,返回长度,要求时间复杂度是O...

2018-01-20 11:13:21

阅读数 363

评论数 0

每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求

Binary Tree Maximum Path Sum原题链接Binary Tree Maximum Path Sum给定一个二叉树,计算二叉树中最长的路径和,路径只需要从一个节点到另一个节点,不需要经过根节点,也不需要从叶子节点开始,但至少包含一个节点乍一看,二叉树上任意一条路径都有可能是最后...

2018-01-12 15:44:45

阅读数 1380

评论数 0

每天一道LeetCode-----有效回文串

Valid Palindrome 原题链接Valid Palindrome 判断给定字符串是否是回文串,只需要比较ASCII码的字母和数字即可,其它符号跳过 首先介绍两个函数,在这里使用比较方便 int isalnum(int c);如果c是数字或大小写字母,返回true int t...

2018-01-11 15:01:57

阅读数 205

评论数 0

Redis源码剖析(十一)跳表

在树形结构中,常见的平衡树有AVL树和红黑树,但是由于AVL树过于平衡,导致维护平衡所需的代价过大,使用的不多,不过其中几种旋转算法还是值得学习的。取而代之的是较为平衡的红黑树,STL中的map和set都是采用红黑树实现的,插入和查找效率为O(logN)。 而跳表也是一种较为平衡的数据结构,与红...

2018-01-10 22:21:36

阅读数 154

评论数 0

Redis源码剖析(十)简单动态字符串sds

在对象系统概述中发现,好像所有和字符串有关的内容都有sds的存在,实际上,它是Redis内部对于c字符串的封装,所谓c字符串,其实就是char *,在sds.h头文件中可以清楚的看到它的定义 //sds.h typedef char *sds; 所以创建sds类型变量实际上就是创建了一个c...

2018-01-10 17:16:33

阅读数 124

评论数 0

每天一道LeetCode-----买卖商品问题,计算最大利润,分别有一次交易,两次交易,多次交易的情况

Best Time to Buy and Sell Stock 原题链接Best Time to Buy and Sell Stock 给定一个价格序列prices,其中prices[i]代表第i天商品的价格,商家需要在某一天买入,然后在之后的某一天出售,计算可以获得的最大利润 本质就是...

2018-01-10 14:37:24

阅读数 3316

评论数 0

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