自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (3)
  • 收藏
  • 关注

原创 每天一道LeetCode-----使用最少的操作将一个字符串转换成另一个字符串,只有插入,删除,替换三种操作

原题链接Edit Distance 题目要求,输入两个字符串word1和word2,计算可以将word1转换成word2的最小的操作次数,可以执行的操作如下,每个操作算作1次将word1的某个字符删除在word1当前位置插入一个字符将word1当前位置的字符替换成另一个字符上面的三个操作每操作一次总操作次数都需要加一,计算最小的操作次数。这是典型的动态规划问题。假设word1的长度为m,

2017-11-30 17:50:50 23306 2

原创 每天一道LeetCode-----化简路径

每天一道LeetCode—–化简路径原题链接Simplify Path要求是输入一个路径,由于路径中存在”..”,”.”等特殊标记符,所以字符串表示的路径可能不是真实路径,返回真实的路径对于特殊字符的解释如下“..”表示回到上一级,如/home/a/../实际指向的路径是/home“.”可以略过,不对当前路径做修改,如/home/a/./b实际指向的路径是/home/a/b“//”多个斜线连在

2017-11-29 14:49:45 276

原创 每天一道LeetCode-----找到有多少个组合加起来和是n,每个组合的数字只能是1或者2

Climbing Stairs原题链接Climbing Stairs 找到有多少个组合的和是给定的n,要求组合中的每个数字只能是1和2动态规划即可 代码如下class Solution {public: int climbStairs(int n) { vector<int> dp(n + 1); dp[0] = dp[1] = 1;

2017-11-28 16:08:23 2305

原创 文章标题

一个任务由两部分组成任务执行空间,由代码段,栈段,和一个或多个数据段组成任务状态段(TSS)如果操作系统使用处理器特权级机制,那么任务执行空间会对每个特权级提供不同的栈(实际上是对0, 1, 2三个特权级分别提供不同的栈)一个正在被执行的任务状态包括任务当前执行的空间,由各种段选择子决定(CS, DS, SS, ES, FS和GS)。在线性地址空间中,是一个段空间通用寄存器状态,包括EAX

2017-11-28 00:53:47 184

原创 每天一道LeetCode-----重新实现开方运算sqrt(x),只返回整数部分即可

Sqrt(x)原题链接Sqrt(x) 重新实现开方运算。因为要求实现的开方运算只需要返回整数部分即可,所以首先考虑一下当n为多少时可以返回。 n是给定x的开方结果一定满足n * n <= x(n + 1) * (n + 1) > x所以可以从这两点入手,同时,因为结果可以是[1, x]范围任意一个数字,所以可以利用二分法加快执行速率代码如下class Solution {public

2017-11-27 20:06:38 1685 1

原创 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布

Text Justification原题链接Text Justification 将以这个字符串数组重组成几行,每个字符串用空格分隔,要求每行的长度相同每行的空格需要均匀分配,且每个单词之间至少有一个空格最后一行尽量将空格放在最后面首先思路是记录已遍历到的单词的总长度,判断是否还能容纳当前遍历到的这个单词。如果能,即之前总长度加上这个单词长度以及一个分隔空格没有超过规定长度,继续遍历

2017-11-26 16:04:38 1630

原创 每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加

Plus One原题链接Plus One 用数组表示一个整数,返回这个整数加一后的数组其实只要从后面开始找,直到找到第一个不为9的位置,将其值加一然后就可以返回了,之前的9都变为0。 因为后面都是9,加一都变成0,然后向高位进位,使高位加一,只要当高位不是9时才会停止继续向高位进位,所以从后面开始找到第一个不为9的位置即可。 如果所有数字都是9,就说明需要增加一个高位1,比如999变为10

2017-11-23 16:52:27 547

原创 每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少

Unique Paths原题链接Unique Paths 计算从左上角有多少条不同的路径可以到达右下角,移动方向只能是向右和向下。对于每个位置,都有两种移动的可能,即向右移动和向下移动。可以用深度优先(dfs)解决,同时为了解决重复计算,可以用动态规划的思想,记录从dp[i][j]到达右下角有多少条不同的路径。除了深度优先之外,可以用迭代法执行动态规划,这样做可以减少dp的维度,只需要一维数组

2017-11-21 16:56:25 11590 1

原创 每天一道LeetCode-----将数组/链表后k个元素移动到前面

Rotate Array原题链接Rotate Array 回转一个给定数组k步,本质上是将后k个元素移动到前面(需要保证k小于数组元素个数)不在原数组上操作的话比较简单,新开一个vector保存回转后的顺序,然后copy到原数组上,时间和空间复杂度都是O(n)如果需要在原数组上操作的话,就不能有额外的空间使用消耗。那么有如下技巧将数组后k个元素逆序将数组前n - k个元素逆序将整个数组逆

2017-11-20 20:38:44 2676

原创 IA-32 Intel手册学习笔记(二)保护模式下的内存管理

内存管理概述(Memory Management Overview)Inter体系结构的内存管理可分为两部分:分段和分页。分段提供了一种机制,这种机制可以为每个程序或者任务提供单独的代码、数据和栈模块,这就保证了多个进程或者任务能够在同一个处理器上运行而不互相干扰。分页机制提供了虚拟内存系统,在这种系统中,程序的执行代码按需要被映射到物理内存中。分页机制同样可以用来隔离多个任务。在保护模式下,

2017-11-20 16:52:41 1566

原创 每天一道LeetCode-----将间隔集中有重叠的间隔合并

Merge Intervals原题链接Merge Intervals 合并所有有重叠的间隔对于两个间隔interval1和interval2,二者有重叠的情况为interva1全部包含interval2,也就是说interval1.start <= interval2.start && interval1.end >= interval2.end。例如[2, 3]和[1, 5]interv

2017-11-19 19:43:37 855

原创 每天一道LeetCode-----将m × n矩阵按照顺时针螺旋顺序转化成一维数组

Spiral Matrix原题链接Spiral Matrix 给定一个m × n矩阵,按照顺时针螺旋顺序将矩阵转化成一维数组。 螺旋的方向是先从左向右,再从上到下,然后从右到左,最后从下到上。所以方向可以用{0, 1},{1, 0},{0, -1},{-1, 0}四个方向向量表示。每个方向向量都由行和列构成,1表示向右或向下移动,-1表示向左或向上移动,0表示不移动。比方说{0, 1}表示行

2017-11-17 14:17:47 6208

原创 每天一道LeetCode-----找到给定数组的连续子数组,使这个子数组的和最大,要求复杂度为O(n)

Maximum Subarray原题链接Maximum Subarray 在给定数组中找到一个子数组(连续),使这个子数组的和最大。O(n2)的解法是求sum[i] - sum[j]的最大值,形如sum[i]的式子表示数组[0 : i)的和。这种方法需要i和j都从[0:n)遍历一遍,复杂度比较高。假设当前找到一个范围[left, right],考虑以下两种情况存在某个[i, left)范围的

2017-11-16 17:15:46 3166

原创 每天一道LeetCode-----n皇后问题

N-Queens原题链接N-Queens n皇后问题,和数独问题一样,都是回溯法的经典题目。 n皇后问题约束是任意两个皇后不能在一行,不能在一列,不能在同一个45度直线,不能在同一个135度直线上。所以求解时需要记录当前行是否已经存在一个皇后当前列是否已经存在一个皇后当前位置所在的45度直线上是否已经存在一个皇后当前位置所在的135度直线上是否已经存在一个皇后因为n行n个皇后,所以

2017-11-15 16:53:22 1747 1

原创 每天一道LeetCode-----求一个数的n次方,n是很大很大的数,n用数组存储着

Pow(x, n)原题链接Pow(x, n) 给定一个数,求n次方。n次方可以分解成两个n/2次方相乘,所以递归即可。class Solution {public: double myPow(double x, int n) { bool negative = n < 0; double res = helper(x, n); retu

2017-11-14 20:33:57 3357

原创 每天一道LeetCode-----找到一个字符串在另一个字符串出现的位置,字符串内部顺序无要求

Valid Anagram原题链接Valid Anagram 实际上就是判断两个字符串中每个字符出现的个数是否相等,直接计算每个字符的个数就可以了。class Solution {public: bool isAnagram(string s, string t) { unordered_map<char, int> shash; unorde

2017-11-13 12:49:07 2549

原创 每天一道LeetCode-----顺时针旋转n×n矩阵90度

Rotate Image原题链接Rotate Image 原地旋转n × n矩阵90度正方形的旋转问题可以一圈一圈的旋转,先旋转最外层,然后内层,再内层。需要旋转的次数是矩阵行数的一半。旋转过程中元素的交换可以多次取值找规律,方法如下matrix[i][j] -> matrix[j][n-1-i];matrix[j][n-1-i] -> matrix[n-1-i][n-1-j];matri

2017-11-12 13:04:37 7100 2

原创 每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾

Jump Game II原题链接Jump Game II 给定一个数组序列,序列中每一个元素的值表示最多可以向后跳多远,初始时从下标0开始,计算最少跳多少次可以到达末尾的元素位置。刚开始是想用深度优先(dfs)+ 动态规划解决的,结果竟然超时了,看到答案后真是….哎╮(╯▽╰)╭对于每个位置,它跳一次可以到达的位置是一个范围,而对于这个范围,跳一次可以到达的位置仍然是一个范围。以示例序列[2,

2017-11-11 13:49:46 5853

原创 每天一道LeetCode-----计算一个直方图空隙的容量(如果装水能装多少)

Trapping Rain Water原题链接Trapping Rain Water 给定一序列,表示一个直方图每个柱的高度(图中黑色部分),计算这个直方图可以存储的容量(图中浅蓝色部分)直观的想法可能是直接求容量,比如说计算高度为2和高度为3的两个柱子之间的容量,但是需要减去二者之间的其他柱子所占的面积,比较麻烦。从图中可以看出,对于某个柱子,判断它是否被某两个柱子构成的区域包含的方法,是判

2017-11-10 14:11:40 1421

原创 每天一道LeetCode-----给定大小为n+1的数组,元素大小在[1 : n]之间,只有一个元素会重复出现多次,找到重复的那个

Find the Duplicate Number原题链接Find the Duplicate Number 给定一定大小为n+1的数组,数组中的元素只可能是1到n中的数字,包括1和n。在数组中,有一个数字重复了多次,找到这个数字。 要求不能改变源数组的值,空间复杂度为O(1),时间复杂度要小于O(n2)。注意数组中每个元素都只能是1到n之间的数字,这提供了一个有用的信息,即对于每个元素,

2017-11-09 19:11:35 6088

原创 IA-32 Intel手册学习笔记(一)系统架构概述

IA-32系统级架构是由寄存器、数据结构、指令组成。用来支持系统级别的操作,比如内存管理,终端和异常处理,任务管理和多处理器控制等。可以看出架构的这些部分和操作系统联系非常紧密,自然而然为操作系统提供了广泛的支持。下图提供了对IA-32中32位系统寄存器和数据结构的整体概述 全局和局部描述符表(Global and Local Descriptor Tables)传统的实地址模式下的汇编中,利用C

2017-11-08 15:39:56 2912

原创 每天一道LeetCode-----找到序列中第一个没有出现的正整数,要求时间复杂度是O(n),空间复杂度是O(1)

First Missing Positive原题链接First Missing Positive 给定一个序列,找到第一个没有出现的正整数,要求复杂度是O(n),空间复杂度为O(1)。 这种时间复杂度要求是O(n)的问题一般都是遍历一遍出结果,但是遍历一遍的代价是需要使用额外的空间记录某些信息以达到解决问题的目的,但是这里不可以使用额外的空间。既然不可以,但又非要不可,那么只能用源序列作为记

2017-11-08 14:32:39 1770

原创 每天一道LeetCode-----找到给定序列中所有和为某个值的集合或集合个数,序列中可以有/无重复项,集合元素顺序不同算不同集合等

Combination Sum原题链接Combination Sum 给定一个无重复项的序列,找到所有和是target的集合,每个元素可以使用多次。可以用深度优先(dfs),对于某个元素都有两种选择,一种是选择当前元素至少一次,一种是不选择当前元素,所以在查找集合时要分开处理。比如说,当前元素下标为1,那么选择该元素,然后仍然从位置1开始继续进行(这保证了下次的元素下标仍然是1,还可以决定选

2017-11-07 20:42:18 1581

原创 每天一道LeetCode-----将字符串的连续相同的字符合并成一个字符后加个数

Count and Say原题链接 Count and Say 求出第n个表达式,第n个表达式由第n-1个表达式的读音构成。如第3个表达式为21,读作1个2,1个1,所以第4个表达式就是1211。第4个表达式读作1个1,1个2,2个1,所以第5个表达式为111221。话说以前有次考试给的就是这一堆字符串,没给说明,问下一个是什么,当时的想法:这都是什么鬼?因为第n个表达式需要第n-1个表

2017-11-06 12:26:42 5177

原创 每天一道LeetCode-----数独盘求解

Valid Sudoku原题链接Valid Sudoku 判断给定的数独盘是否有效,数独盘中可能有空位置。简述一下数独的规则,参考连接Sudoku Puzzles - The Rules.每一行,数字1-9只能出现一次每一列,数字1-9只能出现一次每个3 * 3方格中,数字1-9只能出现一次。这里3 * 3方格只包括9个,即图片中加粗黑线分开的9个方格其实就是每个点只能存在1-9这九个

2017-11-05 14:51:37 1377

原创 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置

Search Insert Position原题链接Search Insert Position 要求找到目标出现的位置或者应该插入的位置,本质上就是找第一个大于等于目标元素的位置,直接调用lower_bound就解决了。当然也可以自己利用二分法重新实现class Solution {public: int searchInsert(vector<int>& nums, int ta

2017-11-04 10:30:42 2955

原创 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置

Search for a Range原题链接Search for a Range 给定一个递增序列和一个值,找到该值在序列中出现的范围,实际上就是找到该值第一次出现和最后一次出现的位置。如果没有,返回[-1,-1]递增序列肯定是二分了,正常二分法查找算法如下,是通过判断中间位置的值与给定值的大小关系,从而将区间变为原来的一半,继续查找,不断的一半,一半,最后变成只有一个元素的区间,比较后返回。

2017-11-03 12:05:40 1130

原创 每天一道LeetCode-----有序数组右移n位后查找某个元素

Search in Rotated Sorted Array原题链接Search in Rotated Sorted Array 一个无重复项的递增序列右移了一定距离,在右移后的序列中查找是否有某个元素 比如[0,1,2,4,5,6,7]右移4位变为[4,5,6,7,0,1,2],在[4,5,6,7,0,1,2]中查找某个元素,事先不知道移动了多少位对于有序序列,首先可以想到的是利用二分法查

2017-11-02 15:24:18 2548 1

原创 每天一道LeetCode-----找到第k个排列

Permutation Sequence原题链接Permutation Sequence 给定n和k,求[1,2,3,...,n]这个序列的全排列中第k个排列可以调用k次next_permutation获取结果,但是next_permutation内部实现比较慢。 首先考虑能不能确定第k个排列是以哪个数字开头的呢,以[1,2,3,4]的全排列为例,找第14个排列以1开头的排列总共有3!个,

2017-11-01 13:28:16 4320 4

二叉树和森林之间的转换

二叉树和森林之间的转换

2017-03-29

数据结构之跳表

数据结构之跳表的完整代码

2017-03-18

跳表完整代码

跳表完整代码

2017-03-17

空空如也

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

TA关注的人

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