自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

恒河沙无数

面壁十年终破壁,难酬蹈海亦英雄

  • 博客(11)
  • 收藏
  • 关注

原创 Simplify Path

leetcode第71题,要求化简linux风格的路径。这里首先要明确linux路径的表示形式,一般而言,“.”代表当前目录,所以不用做处理,“..”代表返回上一次目录,因此就需要跳到前面那一层目录下。很明显,这个题用栈来做会很简单,先用“/”分割字符串,然后凡是遇到“.”的情况,一律越过,不作处理,遇到字符则加入栈,遇到“..”则弹出栈,最后连接一下就可以了。class Solution(obje

2017-03-14 10:27:28 632

原创 Minimum Time Difference

leetcode第539题,竞赛题,要求求给定24小时制时间列表中两个最近的时间间隔。这道题首先要解决的就是把字符串表示的时间转化为分钟数,这样才好计算。 其次,如何才能计算两个最近的时间间隔,这里我们可以把分钟数排个序,然后依次遍历,只需要计算相邻时间点的距离,依次与当前最小值比较就可以了,因为排序后,最小间隔只可能出现在相邻时间点上。但是时钟问题有个很大的麻烦,就是循环问题,比如23:59和0

2017-03-13 08:56:24 501

原创 Unique Paths

leetcode第62题,给定一个m*n的地图,要求从左上角到右下角,找出路径的条数。这一题也可以用DP来做,首先分析,在地图上的每一个格子都代表一个位置,从最左上角开始,只有两种选择,一个是下移,一个是右移。移到新的位置后,还是有两个选择,同上。我们可以把每次移动都记为路径数,如果一个位置出现了从两条路径进来的情况,说明前面有两种可能会走到这里,就把前面两个位置的路径数加起来,以此类推,到最后一个

2017-03-12 09:02:57 382

原创 Minimum Path Sum

leetcode第64题,动态规划,要求在一个二维数组中,找出一条从左上到右下的路径,使得加起来的和最小。要求只能向下或者向右移动。题目给了诸多限制,给了我们很好的处理办法。对于这种地图寻路,很明显DP是很好的思路。设立一个二维数组,大小和给定的二维数组相同,用来记录每个节点处最短路径的和。注意到,第一行和第一列的和是固定的,因为只能向下或者向右,所以可以先算出来。然后中间部分的最短路径和都有两种可

2017-03-10 09:16:32 324

原创 Permutations II

leetcode第47题,全排列的升级版,要求需要全排列的数组中有重复,输出去重后的结果。这个题可以充分运用语言上的特点,比如先生成带有重复项的全排列,这在之前那道题目已经完成了,然后set一下去重,但是这样做太不自然了,复杂度肯定也会依赖于set去重操作,有没有自然去掉重复项的办法呢?可以这样考虑,为什么会产生重复项,因为数组中含有重复数字。在每一轮深搜的时候,单独设置一个dict记录用到的数字,

2017-03-09 09:21:51 309

原创 Combination Sum II

leetcode第40题,要求在候选数组中选出一组数字求和等于目标数,与前一题不同的是,这次每个数字只能选择一次。首先要明白每个数字只能选一次,一开始想用一个数组记录一下每个数是否被用过,但是很快发现这个数组如果是全局的完全没有效果,于是就引入了深拷贝,确保每个递归函数拿到的都是其副本而不是视图,但是这样做大数据跑不过去。其实按照dfs的思路,去重并不是很麻烦的一件事,完全不需要申请额外内存,因为只

2017-03-07 10:54:31 282

原创 Search in Rotated Sorted Array

leetcode第33题,要求在一个旋转后的有序数组中找出目标数字。所谓旋转,指的就是,在某处断开数组,从这一点前面是一个升序排列的数组,后面也是。不难想到用二分查找,我的做法是,先找出分界点,这样这个问题就被转化为两个有序数组的查找问题,直接应用二分查找即可。class Solution(object): def search(self, nums, target): ""

2017-03-06 09:11:27 255

原创 K-diff Pairs in an Array

leetcode第532题,竞赛题,虽然标签是easy,结果我想了很长时间,而且代码相当繁琐,不过我这里没有使用hashset之类可以自动去重的工具,除了使用了map之外,其余的都是正常的逻辑了。一点点分析,首先,如果k是个负数,则可以直接返回0. 接下来k就要分情况了,分成k是0和不是0的情况,这样做确实很繁琐,但是可以通过测试样例。 使用一个字典记录已经用到的数,另一个字典记录绝对值差为k的

2017-03-05 15:21:32 1260

原创 Implement strStr()

leetcode第28题,要求写一个在字符串中找出给定子串的函数,并返回首次出现的索引。这道题可以用KMP算法来解,但是貌似比较复杂,我这里就是用来最简单的办法来做了,利用双指针来遍历两个字符串。这里要注意一点,那就是当搜索到某一位置,无法完全匹配给定子串时,原始字符串的搜索指针要返回刚开是匹配成功的下一个字符。另外,注意边界条件的检查。class Solution(object): def

2017-03-05 09:21:03 300

原创 Next Permutation

leetcode第31题,要求给定一组数字,输出字典序下下一个全排列,要求原地修改。首先,要求原地修改,就不要想着先生成在去查找这个办法了。其实这个方法比较难想出来,主要是找按字典序排列的相邻的全排列之间有什么规律。从最后一位向前搜索,如果一直处于递增状态,说明这一段全排列没法动,因为这一个子段已经处于字典序的最大值了,无论怎么换,都不可能增大这一段的字典序。直到发现搜索到某个位置,递增被打断,说明

2017-03-02 15:10:08 289

原创 Remove Element

leetcode第27题,要求在一个数组中删除指定元素,而且要求是原地操作,不允许使用额外数组。其实这个题目很明显使用双指针法,题目中hint还有一条是如果删除元素很稀少如何提高效率,我的思路是一头一尾进行遍历,头结点观察是否是指定删除的元素,如果是就要和把它放到末尾。这里分三种情况,一种是头指针为删除元素,尾指针为其余元素,则直接交换。如果头指针和尾指针都是要删除的元素,则要尾指针继续左移。其余情

2017-03-02 09:01:51 278

空空如也

空空如也

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

TA关注的人

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