04 2018 档案

摘要:题目如下: 解题思路:这个题目可以进行拆分成几个子问题。第一,求出island的数量,其实就是 200. Number of Islands,这个很简单,DFS或者BFS都能搞定;第二,除了求出island的数量之外,还要求出每个island包括的1的数量,这个也不难,在DFS或者BFS的过程中计数 阅读全文
posted @ 2018-04-29 23:29 seyjs 阅读(539) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:题目要求时间复杂度是O(logN),可以尝试使用二分查找法。首先数组是有序的,而且仅有一个元素出现一次,其余均为两次。我们可以先找到数组最中间的元素,记为mid。如果mid和mid-1以及mid+1都不相同,那么mid就是single number。如果mid和mid-1相同, 阅读全文
posted @ 2018-04-27 13:13 seyjs 阅读(220) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题是 55. Jump Game 的升级版。同样是拒绝使用动态规划,因为会TEL。我的解题思路是每jump一次,求出能到达的位置的最大值,然后再在这个最大值的基础上继续求能到达的最大值,直到最大值大于或者等于数组长度为止。 代码如下: 阅读全文
posted @ 2018-04-26 16:26 seyjs 阅读(185) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题和爬楼梯问题非常类似,我一开始尝试用动态规划,结果得到了TEL。再仔细分析题目,题目只要求判断是否能到达,这点非常关键。这样的话我们需要判断是否至少存在一个index,其能到达的最远距离大于数组长度即可。但是要注意一点,数组可能会存在中间脱节的情况,例如[1,2,0,0,4 阅读全文
posted @ 2018-04-26 16:07 seyjs 阅读(172) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:对于这种数字类型的题目,数字一般都会有内在的规律。不管怎么操作了多少次,本题的数组一直是一个等差数列。从[1 2 3 4 5 6 7 8 9] -> [2 4 6 8] -> [2 6] -> [6]这个序列中,我们可以得到公差分别是1,2,4。如果我们把n扩大一点,打印出其中 阅读全文
posted @ 2018-04-24 23:28 seyjs 阅读(273) 评论(0) 推荐(0)
摘要:题目如下:这两个题目可以用同样的代码来解答,因此就合并在一起了。 题目一: 题目二: 解题思路:两个题目的唯一区别在于第二个题目下一行的最小值不一定会小于前一行的最大值。但是不管怎么样我们可以确定的是,如果某一行的最小值都比target要大,那么这一行之后的值都比target要大。如果target介 阅读全文
posted @ 2018-04-20 14:46 seyjs 阅读(191) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:leetcode里面有很多这样类似的题目,本题是求能够整除的,还有求依次递增的,一增一减的等等,都是万变不离其宗。对于这一类题目,我都是采用动态规划的算法。这题怎么解呢?首先对nums按升序排序,然后创建一个dp数组,dp[i]表示从nums[0]~nums[i]区间符合题目条 阅读全文
posted @ 2018-04-18 23:53 seyjs 阅读(377) 评论(0) 推荐(0)
摘要:题目如下:解题思路:本题是 560. Subarray Sum Equals K 的升级版,可以参见560的解题思路。唯一的区别是560只给了一个精确的和K,而本题是给了一个和的范围,所以最终计数的时候遍历一下题目要求的区间即可。 代码如下: 阅读全文
posted @ 2018-04-14 11:33 seyjs 阅读(215) 评论(0) 推荐(0)
摘要:题目如下:解题思路:本题的关键在于题目限定了是连续的数组,我们用一个dp数组保存第i位到数组末位的和。例如nums = [1,1,1],那么dp = [3,2,1], dp[i]表示nums[i]+nums[i+1] +...+nums[len(nums)-1],有了这一个dp数组后,我们很容易就可 阅读全文
posted @ 2018-04-14 11:29 seyjs 阅读(238) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题难度不太大,对时间复杂度也没有很高的要求。我的做法是用一个字典来保存每个字符出现的次数,用正数1记录标记secret中出现的字符,用负数1记录guess中出现的字符,这样每出现一次正负抵消,即表示出现了一次cow。 代码如下: 阅读全文
posted @ 2018-04-13 10:41 seyjs 阅读(233) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题我采用的是最简单最直接最粗暴的方法,把排序后的nums数组和原始数组比较即可得到答案。 代码如下: 阅读全文
posted @ 2018-04-09 13:12 seyjs 阅读(192) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:因为n的最大值是1e8,所以暴力计算是不行的。首先,我们可以排除掉素数,因为素数的整数因子只有1和自己本身,所以累加的和肯定是1。对于非素数,我们首先找到它的最小整数因子,例如28,最小整数因子是2,表示[2,14]是其中一对整数因子;接下来对较大的那个整数因子继续做最小整数因 阅读全文
posted @ 2018-04-04 10:32 seyjs 阅读(165) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:这个题目的本质是一个爬楼梯问题,在爬楼梯问题中,每次可以选择走一步或者两步。而本题也是一样的,解码的时候选择解码一个字符或者两个字符,但是加大了一点点难度,要考虑这些情况。1,Z对应的编码是26,所以超过26的连续两个字符不能合并解码,27只能解析成2和7;2,0字符只能和前面 阅读全文
posted @ 2018-04-03 10:06 seyjs 阅读(166) 评论(0) 推荐(0)