• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sfesly
博客园 首页 新随笔 联系 订阅 订阅 管理

随笔分类 -  LeetCode

1 2 下一页

leetcode中部分题目的方法总结
 
leetcode Bitwise AND of Numbers Range
摘要:Given a range [m, n] where 0 m) n &= n - 1; return n; } 阅读全文
posted @ 2015-09-13 18:49 sfesly 阅读(196) 评论(0) 推荐(0)
leetcode 221 Maximal Square
摘要:这题使用动态规划,基本想法是建立一张表table,table[i][j]就标志以点(i, j) 为右下角顶点的正方形最大边长,显然,可以通过table[i - 1][j - 1]来得到table[i][j]的值(正方形,只需要考虑对角的方向)。class Solution {public: i... 阅读全文
posted @ 2015-08-08 08:42 sfesly 阅读(221) 评论(0) 推荐(0)
LeetCode222 Count Complete Tree Nodes
摘要:对于一般的二叉树,统计节点数目遍历一遍就可以了,但是这样时间复杂度O(n),一下就被卡住了。这题首先要明白的是,我们只需要知道叶子节点的数目就能统计出总节点树。想法1: 既然是完全二叉树,我肯定是从左子树开始看,如果左子树不完整,右子树就不用再遍历了。由此形成一个递归的搜索过程,先搜索左子树,如果... 阅读全文
posted @ 2015-08-07 21:22 sfesly 阅读(373) 评论(0) 推荐(0)
leetcode 229 Majority Element II
摘要:这题用到的基本算法是Boyer–Moore majority vote algorithmwiki里有示例代码 1 import java.util.*; 2 public class MajorityVote { 3 public int majorityElement(int[] num... 阅读全文
posted @ 2015-08-05 20:11 sfesly 阅读(203) 评论(0) 推荐(0)
leetcode 233 Number of Digit One
摘要:这题属于需要找规律的题。先想一下最简单的情形:N = 10^n - 1记X[i]表示从1到10^i - 1中 1的个数,则有如下递推公式:X[i] = 10 * X[i - 1] + 10^(i - 1)这个递推公式可以这么观察得到:i =0,X[0] = 0i = 1,从1到9, X[1]= 1i... 阅读全文
posted @ 2015-08-04 09:58 sfesly 阅读(186) 评论(0) 推荐(0)
leetcode 238 Product of Array Except Self
摘要:这题看似简单,不过两个要求很有意思:1、不准用除法:最开始我想到的做法是全部乘起来,一项项除,可是中间要是有个0,这做法死得很惨。2、空间复杂度O(1):题目说明了返回的那个数组不算进复杂度分析里面做法:既然不用除法,对于某个数i, result[i] = 0到i - 1的乘积 X i + 1... 阅读全文
posted @ 2015-08-02 18:47 sfesly 阅读(196) 评论(0) 推荐(0)
leetcode 239 Sliding Window Maximum
摘要:这题是典型的堆排序算法,只是比一般的堆算法多了删除的操作,有两件事需要做:1 用一个hash表存储从输入数组索引到堆数组(用于实现堆的那个数组)所以的映射,以便在需要删除一个元素的时候能迅速定位到堆数组中的位置2用一个set保存已经被删除的元素索引(这里指的是输入数组索引),这一点可选;还有一种做法... 阅读全文
posted @ 2015-08-02 09:23 sfesly 阅读(219) 评论(0) 推荐(0)
Word Ladder
摘要:这题的基本思路很轻易看懂,就是转换成图的中的最短路径问题。我一直出现TLE的错误,原因就在转换过程太复杂。可以遍历整个表,建立邻接表或者邻接矩阵。问题是这个过程就会是一个o(n^2)的过程。恰恰这道题又一个测试用例的词特别多,于是这个转换过程就行不通了。办法很简单,就是枚举每个词变化一个字母后可能出... 阅读全文
posted @ 2014-10-19 20:43 sfesly 阅读(199) 评论(0) 推荐(0)
Permutation Sequence
摘要:这题关键是要理解数的顺序怎么通过递推得到。以题目中给出的n = 3为例:我们看到,总共是3! = 6 个数,123132213231312321以1、2和3开始的数各有两个(2!个),我们可以推广一下,对于n!个数,以1、2……n开头的数各有(n - 1)!个,而开头的数小的,总是排在前面。当我们要... 阅读全文
posted @ 2014-10-14 21:52 sfesly 阅读(154) 评论(0) 推荐(0)
Anagrams
摘要:这题折腾主要是因为对于这个anagram的定义理解有误,参看维基页面:Ananagramis a type ofword play, the result of rearranging the letters of a word or phrase to produce a new word or ... 阅读全文
posted @ 2014-10-14 20:18 sfesly 阅读(447) 评论(0) 推荐(0)
Unique Binary Search Trees II
摘要:这题首先要明白的是,二叉搜索树的左子树和右子树都自成二叉搜索树。这种递归定义决定了,如果我知道从1到n - 1时,所有的二叉搜索树结构,那结点数为n的二叉搜索树也可以得到了。转换关系是这样的:对于一个含有n个结点的二叉搜索树,首先树根可以从i = 1~n变化,然后左右子树的结点数目分别是i - 1和... 阅读全文
posted @ 2014-10-13 21:45 sfesly 阅读(182) 评论(0) 推荐(0)
Interleaving String
摘要:这题首先要注意的是两个字符串,Interleave得到一个新的字符串,原来字符串中的字符的顺序是不会改变的。试想,如果枚举s1和s2所能组成的所有字符串,那将是很恐怖的。因为两个字串中的顺序不变,如果能将之类比Minimum Path Sum中,一个m X n的网格,从左上角走到右下角的过程,事情就... 阅读全文
posted @ 2014-10-11 19:56 sfesly 阅读(233) 评论(0) 推荐(0)
Longest Substring Without Repeating Characters
摘要:这题看起来挺简单的,就是存一个哈希表,然后依次遍历整个字符串,遇到前面有过的字符的时候,就该停止当前计数,新的子串应该从发现该字符的位置的下一位置开始。我开始写了一个简单的写法,发现超时了: if (s.empty()) return 0; if (s.length() == 1) retur... 阅读全文
posted @ 2014-10-10 12:46 sfesly 阅读(180) 评论(0) 推荐(0)
Sqrt(x)
摘要:这题没多大技巧性,只是牛顿迭代法多用于数值计算,这里出现有些意外。维基上有方法说明:http://zh.wikipedia.org/wiki/牛顿法 int sqrt(int x) { if (x == 0) return 0; double x0 = 1.0; while (1){... 阅读全文
posted @ 2014-09-30 21:29 sfesly 阅读(154) 评论(0) 推荐(0)
Maximum Product Subarray
摘要:这题看起来和max subarray差不多,只是加法变乘法,尝试过用分治法,发现划分情况的时候特别麻烦。于是分析下这题本身的特点:1、对0较敏感,一旦有0,乘积就不变了,所以需要在遇到0 的时候将数组拆分2、如果没有0, 一旦相乘,绝对值肯定会变大,所以仅考虑正负号的问题就够了。若整个数组相乘是一个... 阅读全文
posted @ 2014-09-30 14:22 sfesly 阅读(371) 评论(0) 推荐(0)
Jump Game II
摘要:这一题比较容易想到的思路是动态规划,因为直接从前往后分析发现,每次一个结点能到达后面多个节点的时候不知道选哪个,就只能递归,这样会造成很多重复的子问题,于是发现可以倒过来,遍历,这样每次一个节点可以抵达的前方的结点到目的地的距离都是确定的,所以可解。但是正如很多的动态规划算法一样,这个算法的时间复杂... 阅读全文
posted @ 2014-09-26 20:57 sfesly 阅读(186) 评论(0) 推荐(0)
Container With Most Water
摘要:这题想到思路就很简单:从两边开始,短板往中间走。可以仔细想下,为什么这样可以保证得到最大容量?首先,从两边开始肯定是没问题的,因为包括了所有的板。为什么短板往中间走就是对的?短板是限制容器容量的,如果长板往中间走,得到的容器必然比先前的容器小(宽度减小,高度不能增加)。而短板往里走,虽然宽度减小,却... 阅读全文
posted @ 2014-09-18 19:29 sfesly 阅读(141) 评论(0) 推荐(0)
Combination Sum 和Combination Sum II
摘要:这两道题的基本思路和combination那一题是一致的,也是分治的方法。其中combination Sum复杂一点,因为每个数可能用多次。仔细分析下,本质上也是一样的。原来是每个数仅两种可能。现在每个数有k +1中可能,k = target / i。所以就是把简单的if else 分支变成for循... 阅读全文
posted @ 2014-09-11 21:54 sfesly 阅读(175) 评论(0) 推荐(0)
Combinations
摘要:组合数,这题的关键是不能漏解。第一感觉应该是分治法。这里,为了方便叙述,使用一个辅助函数vector> combhelper(int first, int last, int k);含义是从first 到last(左闭右开)的区间中选择K个数的组合数,我们倒过来看,最后一个数(last - 1)或者... 阅读全文
posted @ 2014-09-11 20:00 sfesly 阅读(199) 评论(0) 推荐(0)
Binary Tree Maximum Path Sum
摘要:这道题一眼看上去就是一个递归的算法,对于一棵树,分三种情况,包括根、仅左子树、仅右子树,递归的确认最大值,其中第一种情况(路径中包含根)分析可知它会一直包含根,后两中就复杂点,需要一直递归处理每颗子树。代码如下:int maxPathSumWithRoot(TreeNode *root) { if ... 阅读全文
posted @ 2014-08-30 21:02 sfesly 阅读(222) 评论(0) 推荐(0)
 

1 2 下一页

公告


博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3