leetcode
siukwan
这个作者很懒,什么都没留下…
展开
-
Longest Increasing Subsequence (Medium)
第一次做题思路201511092250 1.采用map存储,key为nums[i],value为以nums[i]为结尾的最大递增子序列的长度 2.采用map里面的lower_bounder函数直接找出第一个大于或等于nums[i]的位置,位置ite--,然后遍历前面的数,找出比nums[i]的数里面,长度len最长的,令nums[i]的最大递增子序列的长度为len+1 3.AC时间为148m原创 2015-11-09 22:50:39 · 286 阅读 · 0 评论 -
Jump Game (Medium)
主要有两种思路: 一、 本题只需要判断能否到达最后一个数,那么可以采用贪心策略,到达某个位置i后,在直接在这个位置的基础上走nums[i]步,主要保证能一直前进,就能达到终点; 那么,什么时候才不能一直前进呢? 答案是,遇到0的时候,遇到nums[i]=0的时候,只要我们想办法跳过这个0,那么就可以确保我们可以继续前进。 所以遇到0时的处理方法是,往回搜索,设当前的位置为pos,原创 2015-11-09 20:45:53 · 262 阅读 · 0 评论 -
Two Sum(Medium)
1.遍历一次nums,利用map记录已经遍历过的nums[i],并记录其index :i+1 2.每次求出b=target-nums[i],检测b是否在map中,如果在,则已经得到答案,否则,把nums[i]存到map里面 AC代码: class Solution { public: vector twoSum(vector& nums, int target) {原创 2015-11-20 14:46:01 · 254 阅读 · 0 评论 -
Gas Station(Medium)
1.在做pat的to fill or not to fill的时候想起同样是加油站的题目,于是翻出来复习一下 2.关键在于理解潜在的条件。假设油量为tank,如果到了当前站i,tank0的油量,去掉一个站,那么tank必然比现在的油量还要小,所以更加不可能达到i+1. AC代码: class Solution { public: int canCompleteCircui原创 2015-11-15 17:43:32 · 329 阅读 · 0 评论 -
Range Sum Query - Immutable(easy)
1.这道题目与pat中的1046. Shortest Distance (20)相类似; 2.使用一个数组dp[i],记录0到第i个数的和 3.求i到j之间的和时,输出dp[j]-dp[i]+num[i]即可。 AC代码如下: class NumArray { public: vector dp; vector num; NumArray(vector &原创 2015-11-19 23:21:50 · 1290 阅读 · 0 评论 -
Number of Digit One(Medium)
1.算法说明: 如3141592,在m(digitDivide)=100时,即要求计算百位上“1”的个数 其中a为31415,b为92,31415中出现了3142次“1”,因为每10个数里面出现1次“1”。而实际上,31415是3141500,所以把31415中1的个数再乘以m。如3141400~3141499中,前缀为31414的数出现了100次,所以需要乘以m(此时是100)。class原创 2015-11-20 14:53:19 · 329 阅读 · 0 评论 -
Invert Binary Tree(easy)
1.直接把递归把左右子树翻转即可 AC代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL),原创 2015-11-20 22:20:59 · 320 阅读 · 0 评论 -
310 Minimum Height Trees(Medium)
转自个人博客:http://siukwan.sinaapp.com/?p=189 1.这道题目主要是求一个无向图中,以哪个节点为根节点的树的高度最小; 2.常规方法可以使用BFS或者DFS,对每个点都遍历一遍,求出所有点组成的树的高度,然后找出哪些高度最小的节点,可以通过不断更新最低高度来进行剪枝。实际上我写了BFS和DFS的程序,均出现超时。 3.最终的解题思路采用了不断删除叶原创 2015-11-30 18:06:03 · 1897 阅读 · 0 评论 -
37. Sudoku Solver(Hard)
转自个人博客:http://siukwan.sinaapp.com/?p=787 1.这道题目主要是使用回溯法进行遍历,其中需要注意的是进行剪枝。剪枝情况如下:首先是遍历可以填充的数字,如果遍历完后都没有可以填充,那么就直接回溯,不用继续遍历接下来的空格。另外最基本的就是用hash检测行列和方块里面的数字是否已经被使用,其中方块数字的index应该为[i/3*3+j/3]。AC代码如下:class原创 2015-12-23 00:16:11 · 570 阅读 · 0 评论