09 2018 档案
摘要:题目如下: 解题思路:24点是非常经典的游戏了,因为本题数据量小,可以使用穷举法,把所有的可能结果都算出来。假设nums = [a,b,c,d],记f(n)表示用nums中n个数字进行运算可以得到的结果集,那么f(4)又可以记为f(4) = U(U(f(1),f(3), U(f(2),f(2))) 
        阅读全文
            
摘要:题目如下: 解题思路:题目非常简单,没什么好说的。但是有一个地方我不明白,我最初解法是直接用字符串进行拼接的,但是会超时;改成用数组就好了,在本地测试,两种方法的执行时间相差只有几毫秒。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:贪心算法。首先把intervals按第二个元素从小到大排序,然后遍历intervals,如果集合S和intervals[i]没有交集,那么把intervals[i]的最大值和次大值加入集合S;如果交集只有一个元素,则把最大值加入S。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题的难点在于O(n)的复杂度。为了减少比较的次数,我们可以采用字典树保存输入数组中所有元素的二进制的字符串。接下来就是找出每个元素的异或的最大值,把需要找最大值的元素转成二进制表达后逐位在字典树中查找,查找的时候优先匹配反码,反码不存在则用原码。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题可以采用贪心算法。首先把balloons数组按end从小到大排序,然后让第一个arrow的值等于第一个元素的end,依次遍历数组,如果arrow不在当前元素的start到end的区间,表示这个arrow不能刺破气球,arrow总数加一,然后令arrow继续等于当前这个元素的
        阅读全文
            
摘要:题目如下: 解题思路:简单的不能再简单的题目了,对于任意一个A[i]来说,其可能的最小的最大值是A[i]-K,最大的最小值是A[i]+K。遍历数组,求出所有元素中最大的最小值和最小的最大值,两者之差(小于零则取零)就是答案。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:天坑题,不在于题目多难,而是要理解题意。题目中有两点要特别注意,一是“You choose a destination square S with number x+1, x+2, x+3, x+4, x+5, or x+6, provided this number is <
        阅读全文
            
摘要:题目如下: 解题思路:我的思路是先找出最大值。对于数组中任意一个元素A[i]来说,如果A[i] + K 是B中的最大值,那么意味着从A[i+1]开始的元素都要减去K,即如果有A[i] + K >= A[-1] - K,那么A[i] + K 就可以作为最大值而存在;如果A[i] + K是最大值,那么最
        阅读全文
            
摘要:题目如下: 解题思路:题目要找出一段连续的子串内所有字符出现的次数必须要大于k,因此出现次数小于k的字符就一定不能出现,所以就可以以这些字符作为分隔符分割成多个子串,然后继续对子串递归,找出符合条件的子串。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:我的想法对于数组中任意一个元素,找出其左右两边最近的小于自己的元素。例如[1,3,2,4,5,1],元素2左边比自己小的元素是1,那么大于自己的区间就是[3],右边的区间就是[4,5]。那么对于元素2来说,和左边区间合并组成[2,3]以及和右边区间合并组成[2,4,5],这两段
        阅读全文
            
摘要:题目如下: 解题思路:和【leetcode】84. Largest Rectangle in Histogram的核心是一样的,都是要找出当前元素之前第一个大于自己的元素。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题对运行时间的要求比较低,我试过把遍历所有节点并且把节点的值存入数组,最后排序并取第K-1位的元素作为结果返回也能通过。我的方法是省去了最后排序的步骤,因为BST的规律就是 node.left.val < node.val < node.right.val,所以只要按照中序遍
        阅读全文
            
摘要:题目如下: 解题思路:本题的思路就是解析字符串,然后是小学时候学的解方程的思想,以"2x+3x-6x+1=x+2",先把左右两边的x项和非x项进行合并,得到"-x+1=x+2",接下来就是移项,把x项移到左边,常数项移到右边,得到"2x=-1",最后的解就是x=-1/2。对于任意一个表达式ax+b 
        阅读全文
            
摘要:题目如下: 解题思路:本题题干中有一个非常关键的前提,就是words中的所有word的长度一样,并且都要被使用到。所以,我们可以把输入的s按word的长度进行等分,以s = "barfoothefoobarman",words = ["foo","bar"]为例,下表是等分的结果。为什么只分到sta
        阅读全文
            
摘要:题目如下: 解题思路:因为本题要求的是直接在输入的数组上面修改,而且细胞的生死转换是一瞬间的事情,所以需要引入两个中间状态,待死和待活。这两个中间状态用于在四条规则判断的时候是“活”和“死”,但是呈现在最终的结果是“死”和“活”。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题和括号匹配问题有点像,用栈比较适合。一个元素入栈前,如果自己的状态是“start”,则直接入栈;如果是end则判断和栈顶的元素是否id相同并且状态是“start”,如果满足这两个条件,则说明这个元素和栈顶的元素是配对的,栈顶元素出栈。但是这个函数的的执行时间却不能简单的用e
        阅读全文
            
摘要:题目如下: 解题思路:本题和【leetcode】75. Sort Colors类似,但是没有要求在输入数组本身修改,所以难度降低了。引入一个新的数组,然后遍历输入数组,如果数组元素是是偶数,插入到新数组头部,否则追加到尾部。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:非常简单的一个题目,创建新的树根节点newNode,然后先遍历t1,把t1复制一遍给newNode;接下来遍历t2,如果t2和newNode两者对应的相同位置的节点都存在,那么newNode对应位置的节点的值加上t2对应的值;如果newNode不存在,则创建一个和t2对应位置的
        阅读全文
            
摘要:题目如下: 解题思路:本题是根据中序和后序来构建树,和【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal思路一样。只不过后序遍历的结果是根节点在后,所以依次取根节点的方法就是postorder.pop(-1
        阅读全文
            
摘要:题目如下: 解题思路:根据先序和中序遍历的结果构造二叉树,这也是二叉树系列题目中的经典题型了。这种题目用递归比较简单,先序遍历是先遍历根节点,如题目用例中的3根节点,而中序遍历根节点在中间,所以以3作为分割点把中序的结果分割成[9]和[15,20,7],这两半部分分别对应根节点的左右子树,接下来再对
        阅读全文
            
摘要:题目如下: 解题思路:和【leetcode】235. Lowest Common Ancestor of a Binary Search Tree类似,但是本题不是BST树。我的解题思路是把从根节点到p和q的路径找出来,以题目的example 2为例,p的路径是"L" (L表示左,R表示右),q的路
        阅读全文
            
摘要:题目如下: 解题思路:因为是BST,对于任意一个node,如果其val在p和q之间,那么说明p和q分别在其左子树和右子树,所以node就是其最低的祖父节点;如果val和q或者q相等,同样node就是其最低的祖父节点;如果p和q都比val大,说明这两个节点在node的右边,往右子树方向遍历;如果都小,
        阅读全文
            
摘要:题目如下: 解题思路:我的做法是val_list保存调addNum时候输入的数值,然后在调getIntervals时候将val_list中的值插入到中并返回intervalList,同时清空val_list。插入元素到intervalList时分为四种情况,一是直接插入;二是该值正好是interva
        阅读全文
            
摘要:题目如下: 解题思路:我的方法是先用递归的方法找出最左边的节点,接下来再对树做一次递归中序遍历,找到最左边节点后将其设为root,其余节点依次插入即可。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:非常简单的题目,直接递归就行了。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题考察的是分数的加减法。小学时候就学过,分数的加减法是先求两个分母的最小公倍数,然后分子分别乘以最小公倍数与自己分母的商,相加后约分即可。所以,本题只要按+,-两个符号分割输入字符串,就可以得到所有的分数列表,做加减操作即可。考虑到第一个分数是负数的情况,我在代码中加入了一个
        阅读全文
            
摘要:题目如下: 解题思路:最长的周长一定是树中某一个节点(不一定是根节点)的左右子树中的两个叶子节点之间的距离,所以最简单的办法就是把树中所有节点的左右子树中最大的两个叶子节点之间的距离求出来,最终得到最大值。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:这是数学上的一个定理。对于x1/x2/x3/..../xN的序列,加括号可以得到的最大值是x1/(x2/x3/..../xN)。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题考查就是找出一个单词是不是另外一个单词的后缀,如果是的话,就可以Short Encode。所以,我们可以把words中每个单词倒置后排序,然后遍历数组,每个元素只要和其后面相邻的元素比较,如果是后缀则被Short Encode,否则不行。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:我的解题思路是遍历数组,遇到0删除该元素并插入到数组头部,遇到1则不处理,遇到2删除该元素并插入到数组尾部。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:几乎和【leetcode】719. Find K-th Smallest Pair Distance 的方法一样。只不过一个是减法一个是乘法,还有一点区别是【leetcode】719. Find K-th Smallest Pair Distance中i-j和j-i只算一个元素
        阅读全文
            
摘要:题目如下: 解题思路:对于这一类知道上限和下限,求第N位是什么的题目,可以先看看二分查找的方法可不可行。首先对nums进行排序,很显然任意两个元素距离绝对值最小是0,最大是nums[-1] - nums[0],所以第N小的距离肯定在 0 ~ (nums[-1] - nums[0]) 之间。采用二分查
        阅读全文
            
摘要:题目如下: 解题思路:我的思路很简单,就是利用BFS方法搜索,找到最小值。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:本题求的是第N个Magical Number,我们可以很轻松的知道这个数的取值范围 [min(A,B), N*max(A,B)]。对于知道上下界求具体数字的题目,可以考虑用二分查找。这样题目就从找出第N个Magical Number变成判断一个数是否是第N个Magical Nu
        阅读全文
            
摘要:题目如下: 解题思路:本题可以维护三个字典,dic_1保存没有组成序列的单元素,dic_2保存组成了包含两个元素的序列中的较大的元素,dic_3保存组成了包括三个或者三个以上元素的序列中的最大值。因为合法的序列至少要三个元素,解题的关键是要使得dic_2和dic_1的元素尽快满足条件。对于任意一个还
        阅读全文
            
摘要:题目如下: 解题思路:既然是要求回文字符串,那么最终的输出结果就是对称的。要变成对称字符串,只要把处于对称位置上对应的两个字符中较大的那个变成较小的那个即可,假设n=1234,1和4对称所以把4变成1,2和3对称把3变成2,得到1221,看起来好像没问题了。可是如果n=1283,按照这个方法得到的结
        阅读全文
            
摘要:题目如下: 解题思路:对于这种判断是否的题目,首先看看动态规划能不能解决。本题可以看成是从nums中任选i个元素,判断其和是否为sum(nums)/2,很显然从nums中任选i个元素的和的取值范围是[0,sum(nums)],这里就可以用一个dp数组来保存nums中任选i个元素的和的取值的和,记dp
        阅读全文
            
摘要:题目如下: 解题思路:本题比较简单。题目要求的是字符只能在相同的奇偶性之间互换,即奇数位只能和奇数位交换,偶数位只能和偶数位换。根据这一准则,对于任意一个字符串,我们可以分别求出其奇数位和偶数位的部分,然后分别进行排序,再合并,这样就能得到一个special value,例如 "abcd",奇数位为
        阅读全文
            
摘要:题目如下: 解题思路:对于v = grid[i][j],其表面积为s = 2 + v*4 。接下来只要在判断其相邻四个方向有没有放置立方体,有的话减去重合的面积即可。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:分别求出所有立方体的个数,各行的最大值之和,各列的最大值之和。三者相加即为答案。 代码如下:
        阅读全文
            
摘要:题目如下: 解题思路:巨坑的一个题目。一般来说,leetcode这一类题目分为两种形式,一种是问能不能分割/有几种分割的方法,一种是列出所有分割的集合。本题是第二种,但是有一些特别坑的用例,其结果是无法分割,又非常容易超时。因此解题方法需要先判断能不能分割,能的话再计算怎么分割。首先看能不能分割:可
        阅读全文
            
摘要:题目如下: 解题思路:DFS或者BFS都行。本题的关键在于减少重复计算。我采用了两种方法:一是用字典dic_ladderlist记录每一个单词可以ladder的单词列表;另外是用dp数组记录从startword开始到wordlist每一个word的最小转换次数,这一点非常重要,可以过滤很多无效的运算
        阅读全文
            
摘要:题目如下: 解题思路:本题和【leetcode】97. Interleaving String非常相似,同样可以采用动态规划的方法。记dp[i][j] = 1或者0 表示pattern[0:i]是否匹配string[0:j] ,如果pattern[i] == string[j] 或者 pattern
        阅读全文
            
摘要:题目如下: 解题思路:对于任意一个word,要找出在wordlist中是否存在与之能组成回文的其他words,有两种思路。一是遍历wordlist;二是对word本身进行分析,找出能组成回文的words,并判断是否存在于wordlist中。显然,第二种思路比较的次数要少很多。怎么找出能组成回文的wo
        阅读全文
            
摘要:题目如下: 解题思路:本题有两个维度(宽和高),必须两个维度同时满足条件才行。我们可以把输入数组按其中一个维度排序,例如按宽从小到大排序,如果宽相等,再比较高。这样的话,对于数组中任意一个元素(信封),能够放入该信封的其他信封一定在该信封所在位置的左边。接下来从头开始遍历数组,因为宽度是递增的,因此
        阅读全文
            
 
                    
                     
                    
                 
                    
                 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号