leetcode
王子力
星星之火,可以燎原
展开
-
leetcode之LRU实现
题目:Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.get(key) - Get the value (will always be positive) of th原创 2014-12-22 23:00:39 · 885 阅读 · 0 评论 -
leetcode hard模式专杀之25 Reverse Nodes in k-Group
这段时间出去面试发现自己做算法题的熟练度还是太不够,继续集训一下,专做leetcode的hard模式,这道题我估计如果在面试时碰到,八成要死,这种题属于逻辑想出来不算复杂,但是写出代码来坑巨多的题目,估计这也是这种题被放在hard模式的原因吧。面试的时候如果出这种题,未必是考你逻辑,而是考你思维严密度,这题的happy flow我很快就做出来了,但是真正通过leetcode OJ却是在原创 2017-06-04 11:58:29 · 407 阅读 · 0 评论 -
leetcode hard模式专杀之23 merge k sorted lists
这个题目思路不算很复杂,但是容易出错,leetcode把它算作hard模式的题目,我看在medium在hard之间,不过如果面试的时候碰到,也就坑死爹。思路如下:假设每个链表从小到大排列,头是最小值,则每次从所有链表头中找出最小值, 然后把它摘下来,放到结果链表中,从k个值中找到最小值,不是个难事,不过如果每次都去计算,哪怕用一次冒泡,算法复杂度也是够呛的,因为摘下来后最小原创 2017-06-03 16:51:34 · 337 阅读 · 0 评论 -
leetcode hard模式专杀之10Regular Expression Matching
leetcode原创 2017-06-02 19:41:36 · 259 阅读 · 0 评论 -
leetcode hard模式专杀之55. Jump Game
这道题其实是medium模式,不过因为他是Jump Game II的前提,所以也一并做了,思路倒是不负责,动态规划来做就好,不过这题让我提交了七八次才通过oj,前几次是超时,后几次修改是有些条件没考虑,所以是很值得仔细琢磨的一道题,思路是这样的,从0开始,想象可以往后染色,然后在染色范围内,继续往后染色,如果某次染色的最大index大于等于最后的index即length-1,则返回true,如果一原创 2017-06-09 11:54:41 · 245 阅读 · 0 评论 -
leetcode动态规划专杀之53. Maximum Subarray
这一题是easy模式,但是我甚至觉得比某些hard模式都难,总之想法不是很直观,我没有很快做出来,却是能用动态规划来解决的,这种类型真的要多练练。没太多好解释的,上代码,只要对着代码和一个例子,一步步推敲一遍,相信很容易看懂public class Solution { public int maxSubArray(int[] nums) { if(nums==null原创 2017-07-01 21:16:21 · 242 阅读 · 0 评论 -
leetcode矩阵类题目专杀之54. Spiral Matrix
http://www.fengchang.cc/post/3原创 2017-07-02 08:15:33 · 217 阅读 · 0 评论 -
leetcode hard模式专杀之45. Jump Game II
这道题跟其父题Jump Game都属于实现出来不难,但是通过OJ不容易的题目,反正我是这样感觉的,因为第一版我很快都写出来了,但是通过OJ却弄了七八次,蛋疼无比,不过总算是没有看答案,坚持自己写出来了,能仔细琢磨总结其经验,也不枉花了这么多时间。原本以为用其父题目稍微改改代码就能完成,后来发现不是这样,时间复杂度完全通不过,于是苦苦琢磨其他方式。最后思路大概是这样的,从第一个开始通过i+nums[原创 2017-06-10 21:47:40 · 234 阅读 · 0 评论 -
leetcode hard模式专杀之99. Recover Binary Search Tree
这题的思路我还是很快想出来了,奈何二叉树的数据结构和遍历模式不太敏感,代码迟迟没写出来,看来二叉树类的题目需要专项训练一下,补补,下一篇博客我会把二叉树的几种常见算法总结一下。说思路吧,其实关键就是找到两个交换过的位置就行了,接下来做个交换就行,BST本身如果把它平展开来,就是一个排序序列,例如1,2,3,4,5,6,7,那么这样一个序列假如随机交换两个数会发生什么呢?例如变成1,5,原创 2017-06-11 11:24:28 · 251 阅读 · 0 评论 -
leetcode hard模式专杀之295. Find Median from Data Stream
这道题没有独立做出来,而且乍一看,怎么觉得这题这么容易,想当然地以为插入的数据就是排好序的,被sample误导了,于是就各种不通过,这题与其说是考算法,不如说是考数据结构,直觉地想法是维护一个排序地数据结构,这个数据结构需要有如下特点:1. 排序2.插入效率高(因为插入频率高)3.读取效率高(因为要取中位数)所以,arraylist不行,linkedlist不行,那怎么破?原创 2017-07-13 18:38:54 · 237 阅读 · 0 评论 -
leetcode hard模式专杀之68. Text Justification
这道题又是属于思路不难,但是边界条件极难把握准确的,题目,是一道联系思考边界条件的难得好题,值得仔细琢磨。思路其实非常简单,遍历,计算该塞多少空格,拼字符串,加入list,说起来就这么简单,没有任何难想的地方,但是组织代码有一定的难度,估计这个就是这道题为hard模式的原因吧,不bb了,上代码:public class Solution { public List full原创 2017-06-11 22:25:00 · 254 阅读 · 0 评论 -
leetcode hard模式专杀之72. Edit Distance
这题是比较标准的动态规划吧,动态规划里不算难,关键找出递归表达式,上代码:public class Solution { public int minDistance(String word1, String word2) { // Start typing your C/C++ solution below // DO NOT write in原创 2017-06-13 20:17:06 · 223 阅读 · 0 评论 -
leetcode hard模式专杀之233. Number of Digit One
这道题思路很快就有了,但提交了七八次才通过,总结下来,是自己对数字计算可能还是不够敏感,导致边界条件总是考虑不周,不过总算独立完成了,足够犒赏自己一笔钱了,嘿嘿。思路如下:比如有一个数123, 可以这样计算,设定个位数为1,满足条件的其他位数上的组合有n0个,再假设十位数上的数字是1,满足条件的其他位数上的组合有n1个,再假设百位上的数字位1,满足条件的其他位数上的组合为n3,则最终的结果为n1+原创 2017-07-18 11:28:49 · 269 阅读 · 0 评论 -
leetcode hard模式专杀之135. Candy
这题大概思路出来大概十来分钟,不过做到通过oj却花了几个小时,主要是一些情况没有考虑完整,首先在纸上画一划,看看如果人去做这件事,会怎么做,画了几遍之后,可以得出一个大概都结论,例如ratings序列是[1,2,3,7,5,6,9,2,1],首先第一个位置的孩子得到1个糖果,rating值等于5的孩子得到1个糖果, 然后最后一个孩子得到一个糖果,然后其他位置的孩子,从这几个位置推导出来即可,那么两原创 2017-08-06 15:31:34 · 241 阅读 · 0 评论 -
leetcodehard 模式专杀之85. Maximal Rectangle
这道题没有自己想出来,参考了网上的思路,基本上就是分两部,把求最大面积全1矩阵的问题转化为84. Largest Rectangle in Histogram, 尼玛难怪这两题是相连的,而且两道都是hard模式,如果没做出来84直接做85,还真是有些坑爹呢,看来leetcode最好还是按顺序做比较好。至于84怎么做这个我下一期再出解释吧,咱这里就先假设已经有这么一个现成的算法解决了84。那么解决8原创 2017-09-17 22:49:12 · 241 阅读 · 0 评论 -
leetcode hard专杀之84. Largest Rectangle in Histogram
上篇博客说了,这题是基础,所以这里还是把这题的思路说一下,这题难度蛮高的,动态规划不好做,brute force性能又不够,着实令人头疼,后来还是看了下网上的思路,而且代码实现出来还不是那么符合直觉。总之思路是这样的,从0~n遍历,对每个i,都以它为中心,分别向左和向右数,任意一个方向,都期望单调其递增,直到左边出现第一个index递减,极为left,同样右边出现第一个递减的位置rig原创 2017-09-18 13:08:24 · 442 阅读 · 0 评论 -
leetcode hard模式专杀之76 Minimum Window Substring
继续刷leetcode hard模式 https://leetcode.com/problems/minimum-window-substring/#/description这题感觉算是hard模式中比较容易的 一题, 不过算法非常典型, 是一个举一反三的好例子, 很多看起来很难的题目都可以通过这题找到原始思路。按说找一个字符串窗口不是难事,但是要保持O(n)的时间复杂度,原创 2017-06-05 13:10:48 · 323 阅读 · 0 评论 -
leetcode hard模式专杀之41 First Missing Positive
这题看下来第一灵感就是用位运算,因为要用 O(n) time and uses constant space.,于是很快地写了一版,果不其然,用位运算一定要考虑溢出的问题啊,第一版草草这么写果然就溢出了,因为把1 左移整数位,java这边移动个32位基本就到顶了,就算用long,移个64位差不多也到顶了,于是想到一个解决方案即使用多个整数,一个整数就算能表示k个位置,两个整数不就可以表示2k个原创 2017-06-06 23:16:40 · 256 阅读 · 0 评论 -
leetcode hard模式专杀之52 N-Queens II
这道题我不清楚跟N-Queens的区别是什么,核心算法都是一样的,只是这道题是计数,前一道是计算具体的组合,组合都出来了,计数还会难吗?不bb,上代码:public class Solution { public int totalNQueens(int n) { Map result = new HashMap<>(); int[] q=new原创 2017-06-07 22:04:25 · 290 阅读 · 0 评论 -
leetcode之图片(矩阵)旋转
题目:You are given an n x n 2D matrix representing an image.Rotate the image by 90 degrees (clockwise).Follow up:Could you do this in-place?思路:题目的关键在in-place,否则就太容易了,为了达到in-place只能原创 2014-12-24 22:22:25 · 848 阅读 · 0 评论 -
leetcode之倒转一句话单词
题目:Given an input string, reverse the string word by word.For example,Given s = "the sky is blue",return "blue is sky the".click to show clarification.Clarification:What co原创 2014-12-25 21:56:56 · 857 阅读 · 0 评论 -
leetcode之找光棍数
题目:Given an array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it without原创 2014-12-25 23:04:47 · 752 阅读 · 0 评论 -
leetcode之有随机指针的链表深拷贝
题目:Copy List with Random PointerA linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.Return a deep copy of原创 2014-12-13 11:51:55 · 3309 阅读 · 0 评论 -
leetcode之判断是否BST二分搜索树
题目:Validate Binary Search TreeGiven a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nod原创 2014-12-13 22:00:44 · 1290 阅读 · 0 评论 -
leetcode之判断两链表首次交汇节点
题目:Intersection of Two Linked ListsWrite a program to find the node at which the intersection of two singly linked lists begins.For example, the following two linked lists:A:原创 2014-12-13 22:09:31 · 563 阅读 · 0 评论 -
leetcode hIndexII
视频分析:http://v.youku.com/v_show/id_XMTMzMzI5OTQ1Ng==.html 题干: Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize your algorithm?Hint:Expected runtime c原创 2015-09-12 13:23:58 · 483 阅读 · 0 评论 -
leetcode-happy number implemented in python
class Solution(object): def isHappy(self, n): if n==1: return True elif n==4: return False else: return self.isHappy(self.Happy(n)) de原创 2015-08-22 12:52:36 · 1240 阅读 · 0 评论 -
leetcode hIndex implemented with python
视频分析: http://v.youku.com/v_show/id_XMTMyOTc5NjMwNA==.html 题干: Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher’s h-in原创 2015-09-12 13:21:05 · 774 阅读 · 0 评论 -
leetcode add digits
视频分析: http://v.youku.com/v_show/id_XMTMzMjUwNjk3Mg==.html 题干: Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.For example:Given num = 38, the proc原创 2015-09-12 13:33:14 · 1070 阅读 · 0 评论 -
leetcode hard模式专杀之51. N-Queens
继续leetcode hard模式, 八皇后问题的一般版,这种举一反三的题目值得好好琢磨,典型的回溯法,思路就不多说了,上代码,注意一一些边界条件的细节:public class Solution { public List transfer(int[] q){ List result = new ArrayList<>(); for(int原创 2017-06-07 20:19:08 · 305 阅读 · 0 评论 -
leetcode hard模式专杀之37. Sudoku Solver
继续刷题leetcode之数独这题乍一看挺吓人的 ,不过正好前几个礼拜做过八皇后问题,对回溯法有一定的记忆和认知,然后还有的技巧是位运算,hashmap记录等等,尽可能地节省空间复杂度。思路如下,先遍历一遍二维数组,本次遍历是为了收集统计数据,哪些统计数据呢?有三个,第一,每一行还差哪些数字没填, 第二,每一列还有哪些数字没填,第三,每个block还有哪些数字没填,为了节省空间,那些数字没填就原创 2017-06-07 17:53:45 · 319 阅读 · 0 评论 -
leetcode hard模式专杀之42. Trapping Rain Water
继续刷leetcode hard模式, 这题是我喜欢的类型,可能因为我空间想象力还行,这题在2次内通过oj,思路如下: 可以这样想, 每个数字上方拖着的空间如果左边有墙,右边也有墙,那么这个水就流不出去,而墙可以用左边最高的数字和右边最高的数字来表示,例如位置i,左边最高墙是3,右边最高墙是4, 那么i上能托几格水呢?当然是min(3,4)-i啦,所以这个问题就转换为如何高效率地找出每个位置i原创 2017-06-06 17:06:22 · 322 阅读 · 0 评论 -
leetcode hard模式专杀之32. Longest Valid Parentheses
继续leetcode hard模式,这题整了我好久,想了好几种方法,最终都没能通过oj都时间复杂度,然后忍不住看了答案,简洁到尿,想死, 上代码:import java.util.Stack;public class Solution { public int longestValidParentheses(String str) { int n = str.原创 2017-06-06 16:09:05 · 232 阅读 · 0 评论 -
leetcode hard模式专杀之57. Insert Interval
这题思路 不算难,但同样是要注意边界条件, high level的思路是如果新插入的interval没有任何overlap,那就直接插入,否则,就通过如下方式合并:删掉所有的有overlap的interval,再插入一个新的interval那么问题来了,如何确定哪些是overlap的interval, 新的interval又是从哪儿到哪儿?要回答这两个问题,通过两次循环遍历足矣,上代码:原创 2017-06-08 14:11:26 · 334 阅读 · 0 评论 -
leetcode hard模式专杀之420. Strong Password Checker
题干:A password is considered strong if below conditions are all met:It has at least 6 characters and at most 20 characters. It must contain at least one lowercase letter, at least one uppercase le...原创 2018-11-29 17:59:40 · 382 阅读 · 0 评论