![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode解题报告
jacob_wjj
领英主页:https://www.linkedin.com/in/jiang-bo-a56771ba/
展开
-
最长锯齿序列 Leetcode
题意给定一个序列,求最长锯齿序列的长度,所谓锯齿,就是子序列中不断的增大然后减小或间接的减小然后增大。分析一开始是没有啥思路的,感觉应该要使用DP,那么关键就是找到子问题。首先,结果子序列可以是先递减在递增,也可以是先递增再递减,求解的过长都是一样的,假设d[i]为先递减再递增类型序列以第i个位最后一个数的最长子序列长度,f[i]为递增再递减以第i个位置为最后一个数的最长子序列长度,那么就有下面的公原创 2016-09-22 22:19:55 · 1065 阅读 · 0 评论 -
Multipy String | leetcode
字符串相乘两个任意长的数字字符串相乘,不为负数,结果返回一个字符串。任意长,意味着不可能转为整数在相乘,只能逐位乘得到结果。注意,每一次相乘的结果都会往左边挪动以为在和前一位的结果相加。原创 2016-03-04 11:19:21 · 541 阅读 · 0 评论 -
Create Maximum Number | LeetCode
Create Maximum Number题意 Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum number of length k <= m + n from digits of the two. The relative order of the d原创 2015-12-25 10:31:28 · 1511 阅读 · 0 评论 -
Maximum Product of Word Lengths | LeetCode
Maximum Product of Word Lengths题意 Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each wor原创 2015-12-22 20:53:30 · 468 阅读 · 0 评论 -
Bulb Switcher | LeetCode
Bulb Switcher题意 There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it’s of原创 2015-12-22 10:37:06 · 308 阅读 · 0 评论 -
Super Ugly Number | LeetCode
题目的意思就是根据给定的素数数组为因子,求第n个丑数。解法其实和ugly number II 差不多,只不过输入的素数个数是不确定的。最简单的方法就是枚举,直到找到第N个丑数,但是因为你不知道输入的因子,所以你枚举的数量就需要非常大,效率也就会变得非常糟糕。还是利用之前的方法,重复的利用已经计算出来的丑数来确定下一个丑数,直到找到第N个。首先,我们需要确定到底有几个素数因子,下一个丑数一定是之原创 2015-12-03 16:35:12 · 944 阅读 · 0 评论 -
Letter Combinations of a Phone Number
Letter Combinations of a Phone Number题目这里就不copy过来了,以免有凑篇幅的嫌疑。对于手机键盘的字母分布,其实我们大家都非常的熟悉,需要注意的是,我也是通过跑网站提供的用例才发现,就是但凡你输入了0或者1,那么最后的结果就是空。这里我提供一个比较naive的解法,将输入的数字串拆分,分别对应相应的键盘字符串,然后加入到结果集合中,不断的加入新字符原创 2015-12-01 23:58:05 · 472 阅读 · 0 评论 -
Next permutation
本文给出两种解法,一种是直接调用STL函数next_permutation获取下一个序列,另外一个则是根据下一个序列的特点,代码如下: void nextPermutation1(vector& nums) { next_permutation(nums.begin(),nums.end()); } void nextPermutation2(原创 2015-12-02 12:39:33 · 516 阅读 · 0 评论 -
LRU Cache算法实现(leetcode)
题意实现一个LRU cache类,使得在我们需要获取一个key的值时,如果cache中有,那么直接返回值,否则就返回-1;同时我们还可以设置一个cache的值,这个主要是在我们出现cache miss的时候,我们需要替换其中的项或者需要从主存中载入对应的项。思路LRU,最近最少使用,也就说在出现cache满的时候,替换原则就是替换最近最少使用的项。类中必须体现出这个原则,那么我们应该如何来做呢?首先原创 2016-03-28 20:40:59 · 798 阅读 · 0 评论 -
Product of Array except self | leetcode
思路simple的方法就是使用除法,先得出整个数组的元素乘积(注意越界),然后每位除以该位元素,就能够得到结果。但是题目要求是不能使用除法,而且复杂度要求为O(N). 那么我们可以这么做,先从头到尾扫一边,得到前面所有元素的乘积,第一位设置为1,这样,最后一个数是满足题意的。其他还需要继续相乘,所以我们这次从尾开始扫一边,这样就能得到题的结果了。下面是实现代码:vector<int> product原创 2016-05-14 22:12:49 · 232 阅读 · 0 评论 -
Count Numbers with Unique Digits
看到这道题一开始还真是有点蒙 ,想着找出1,2,3位数之间重复数字个数的规律。发现其实3位也就是0<=x<1000,要向统计存在重复的数字就已经很困难了,很难找出规律。那么我们就反过来直接求符合条件的数。首先除了第一位是从1~9中选取,后面的其他位都是从0~9中选取,所以其实就是一个排列组合问题,第一位有9种选择,第二种就不能和第一位重复,那么10-1,剩下9种选择,第三位由于不能和前面两位重复,1原创 2016-06-22 21:43:17 · 359 阅读 · 0 评论 -
Regular Expression Match
记录这道题主要是为了加深自己的理解,虽然代码AC了。 这是正则匹配,也就是和我们正常的字符串匹配有一点差别。对于,它可能代表前一个字符,0个或者多个,所以这个问题主要就会围绕当前字符的下一个字符是否为’‘来讨论。如果pattern的长度为空,那么源字符串如果不为空,肯定就返回false. 如果pattern的长度为1,那么源字符串长度如果不为1,那么肯定也为false.因为无论pattern这一原创 2016-06-18 22:30:39 · 504 阅读 · 0 评论 -
Largest Divisible Subset
这道题挺有意思的,就是给定一个序列的整数,然后让找出最大的子集,这子集中的任何两个元素能够互相整除(i%j==0或者j%i==0).思路子集中两个元素能够保证能够整除,那么如果再加入一个整数,判断的条件就是这个整数能够整除子集中最小的数或在能够被其中最大的数整除,当然,这个说法仅仅是针对题目解答的一个途径。我们将序列排序,然后使用动态规划来求解,如何使用动态规划呢,设 T[n]为第n个整数为最大时原创 2016-07-03 22:03:19 · 390 阅读 · 0 评论 -
Distinct Subsequences
这道题是有一定的规律的,同样类型的题就是给定的两个字符串,问经过最少的字符删除或者替换能够将两个字符串变成一样。看过比较好的解法,都是通过动态规划。构建一个二维矩阵d[i][j] 然后,代表两个字符串中的第i,和第j。class Solution {public: int numDistinct(string s, string t) { int ns=s.size();原创 2016-06-26 22:27:34 · 273 阅读 · 0 评论 -
Longest Increasing Path in a Matrix | leetcode
题意题目的意思就是在一个矩阵中找出一个最长的递增序列思路这个题目是很明显的需要使用深度优先搜索方法的。矩阵中的每个位置都可能是序列的起点,所以需要遍历所有的位置,在搜索路径上的一个位置时,如果周围的数字不比自己大,这时候就返回,当前路径搜索结束。这里会存在可以优化的空间,就是搜索路径中会存在很多的重复,所以我们可以使用额外的空间存放每个位置为起点的最长序列。实现代码如下:class Solution原创 2016-05-21 20:16:51 · 397 阅读 · 0 评论 -
Data Stream as Disjoint Interval | leetcode
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */class Sum原创 2016-06-08 10:44:39 · 343 阅读 · 0 评论 -
单链表是否有环,环的大小,第一个连接点,有环的单链表长度
给定一个单链表,只给出头指针h: 1、如何判断是否存在环? 2、如何知道环的长度? 3、如何找出环的连接点在哪里? 4、带环链表的长度是多少? 下面是实现,可以相互检查一下是否不正确。/* 2 Here we discuss four question about single list 3 1. isCircle(ListNode* head) 4 2原创 2016-04-24 20:06:19 · 398 阅读 · 0 评论 -
Integer Break | leetcode
原题 Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get. For example, given n =原创 2016-04-20 09:53:47 · 279 阅读 · 0 评论 -
Burst Balloons | LeetCode
这题一看到就想起消消乐的游戏,每次消除后其他的马上就重新挨近。一开始想到可能需要用DP,但是无从下手,找不到相似独立的子问题,因为一旦你找到一个i burst, i-1和i+1就重新排布,相邻。也就是说,两边的重新合一起,并不独立。回顾下之前解决的一道关于股票交易的题,里面涉及到一个cooldown的状态,可以参考一下这个题的解决思路。这道题当时是通过分析最后一次操作状态和前一次操作状态上的关原创 2015-12-02 10:15:26 · 1377 阅读 · 0 评论 -
3Sum closet | LeetCode
题目不复制过来了,首先需要明确题目要求,就是找出三个数的和距离target最近,如果nums的大小只有3或者小于3个,那么就直接返回accumulate就可以了。如果大于3,这里就需要枚举,首先确定的就是第一个数的选取,注意,为了方便我们需要首先将nums进行排序,这样带来的好处就是每次枚举时可以利用有序的条件,大大减低复杂度。选取第一个数之后,然后枚举这个数后面的所有两个数组合,同时记录sum。原创 2015-12-01 23:52:33 · 458 阅读 · 0 评论 -
Minimum Height Trees | LeetCode
For a undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible rooted trees, those with minimum height are called mini原创 2015-11-30 14:38:12 · 1151 阅读 · 0 评论 -
leetcode [Nim game解题报告]
You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the原创 2015-10-13 19:45:22 · 475 阅读 · 0 评论 -
3Sum | LeetCode O(N*N) Solution
解题思路:如果是两个数加和等于target,那么我们很容易就想到O(n)的算法,这里题意是三个数的和等于target,其实就可以拆分为2Sum的问题,只是target‘=target-i;这里的I是枚举的第一个数,所以有算法复杂度为O(N*N)注意:保证结果是排序的,所以可以在一开始就将原数组排好序。另外为了避免重复,有两种解决方案:1)在求出所有结果之后,使用unique函数结合er原创 2015-11-23 20:41:47 · 349 阅读 · 0 评论 -
Count of Smaller Numbers After Self | LeetCode
Count of Smaller Numbers After Self | LeetCode题意理解 我一开始看到这个题的时候,觉得挺简单,至少题意很容易理解,使用O(N*N)的解法肯定能够得出答案,只是提交的时候回出现超时。想了一下,感觉应该还有地方可以优化,总觉得应该可以使用排序来辅助。分析下题意,每个位置的结果应该是这个数后面小于这个数的个数,构建一个新数组,然后将原数组反向插入并排序,原创 2015-12-10 21:26:42 · 893 阅读 · 0 评论 -
Remove Duplicate Letters
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-12-10 17:45:59 · 685 阅读 · 0 评论 -
Basic Calculator II | LeetCode 48ms C++ Solution
Implement a basic calculator to evaluate a simple expression string.The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should原创 2015-11-22 22:33:43 · 339 阅读 · 0 评论 -
Additive Number | Leetcode
Additive number is a positive integer whose digits can form additive sequence.A valid additive sequence should contain at least three numbers. Except for the first two numbers, each subsequent num原创 2015-11-18 19:43:35 · 680 阅读 · 0 评论 -
Maximum Product subarray | LeetCode
Find the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the larges原创 2015-11-22 19:40:57 · 298 阅读 · 0 评论 -
H-index II | LeetCode 12ms Solution
相对于第一题,这里提供的输入数组时已经排序的。解题思路:最简单的做法就是遍历,依次判断每一个位置的元素是否符合H-index 的定义,而且题目中给出了当出现多个值得时候,选取最大的。比如输入为【0,1,2,5,6】根据定义是至多h篇文章至少被引用h次。所以这里出现2,5其实都是符合条件的,这时候我们选取5,这样返回值就是2.又假设输入时【1,0,1,1,2,1】这里1,2都是符合条件的,我原创 2015-11-23 10:55:34 · 306 阅读 · 0 评论 -
Unique Paths I | II leetcode
Unique Paths I 第一题还是比较简单的,robot只能向右和向下走,看到题目的第一个感觉就是使用递归,可能最近对递归有了一点情结。先看看递归实现的代码://@author jiangbo //time limit exceeded int uniquePaths(int m, int n) { if(m==1||n==1) retu原创 2015-12-12 00:41:11 · 283 阅读 · 0 评论 -
House Robber I & II | LeetCode
House Robber I 这是一道比较典型的DP的题目,由于相邻的两家不能同时被偷,所以每次选择的时候都需要进行取舍。选取了两个偶数位的值不一定会比加在中间这个奇数位的值大,所以就需要比较,每次选取最大的。代码如下:int rob(vector<int>& nums) { int size = nums.size(); int even=0,ad=0;原创 2015-12-12 14:11:14 · 314 阅读 · 0 评论 -
Best Time to Buy and Sell Stock| LeetCode
题目很简单,就是给定一个数值,每个值代表每天的股价,如果最多交易一次的话(买入一次,卖出一次),求最大收益。这个生活中都知道,低入高出,必然可以得到高收益。解题思路:设定初始化买入为第一天,记为最小,往后扫,记录如果卖出的话,最大收益为多少,并已之前的记录作比较。代码很简洁,如下: int maxProfit(vector& prices) { int res=0;原创 2015-11-25 22:00:41 · 451 阅读 · 0 评论 -
Implement Trie (Prefix Tree)
Trie Trie 就是一棵字典树,根节点为空,从根节点出发到任意一个叶子节点的路径都是一个单词,也就是当前节点的父节点往上一直到根节点的路径是这个单词的前缀,每个节点分别维护一个数组记录后续子节点以及从根节点到当前节点的路径是否为一个单词。 这个题目的意思就是实现这样一棵字典树,插入一个单词,搜索一个单词,以及使用前缀搜索。题意及条件 题目指定只包含a~z的小写字母,实现单词的插入原创 2015-12-15 10:12:17 · 237 阅读 · 0 评论 -
Majority Element I&II | Leetcode
Majority Element I题意 题目很简单,就是找出数组中出现次数超过一半的数。第一个想到的方法就是给数组排序,既然出现的次数超过一半,那么中间那个数必然就是答案。当然这也的效率还是不够高,是O(nlogn).是否还有更加高效的方法?的确如此,我们可使用一对变量,分别记录数字以及数字出现的次数,每当扫描的数不等于当前记录数字的时候,就将次数减一,一旦出现次数等于0,就将数字换成当前扫描原创 2015-12-14 21:40:34 · 216 阅读 · 0 评论 -
Kth Smallest Element in a BST
Kth Smallest Element in a BST题意 题目很明显,就是给定一棵二叉搜索树(BST) ,然后返回第K个最小数。对于这道题,我的方法是直接进行中序遍历,返回第k个数即可。代码如下:代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNod原创 2015-12-13 18:22:27 · 223 阅读 · 0 评论 -
Perfect Squares | LeetCode
Perfect Squares 感觉这完全就是考数学定理,如果你记得四元平方和定理还有三元平方和定理,那么这道题就是一个简单的验证的题目,代码如下,解释了如何使用这两个定理解决这道题。int numSquares(int n) { //四元平方定理,就是任意一个数都可以拆成四个平方之和,所以这题的答案只有1,2,3,4 //三元平方和定理,就是只要一个数是这个形原创 2015-12-12 18:41:43 · 229 阅读 · 0 评论 -
Partition List | LeetCode 8ms C++Solution
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in each of原创 2015-11-24 19:51:14 · 295 阅读 · 0 评论 -
leetcode [Generate Parentlesies]解题报告
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:"((()))", "(()())", "(())()", "()(())", "()()原创 2015-10-13 20:30:25 · 342 阅读 · 0 评论 -
Longest increasing subsequence |LeetCode
int lengthOfLIS1(vector& nums) { if(nums.size()==0) return 0; vector res; for(int i=0;i auto it=lower_bound(res.begin(),res.end(),nums[i]);原创 2015-11-19 14:22:04 · 341 阅读 · 0 评论 -
Binary Tree Path | LeetCode
solution:vector binaryTreePaths(TreeNode* root) { vector res; if(root==NULL) return res; string path=""; helper(path,res,root); return r原创 2015-11-22 23:36:26 · 352 阅读 · 0 评论