06 2018 档案

摘要:题目如下: 解题思路:我的解法很简单,每次操作对除了最大值外的其他元素做+1的操作,直到把最小值加到和最大值一样大;这样的,原来的最大值变成了最小值,原来的次大值就变成了最大值。继续+1的操作,直到最小值和最大值相等。如下图,假设输入数组为[5,5,6,8,8],可以很明显的看出规律。 代码如下: 阅读全文
posted @ 2018-06-29 16:31 seyjs 阅读(115) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:就三个字-线段树。这个题目是线段树用法最经典的场景。 代码如下: 阅读全文
posted @ 2018-06-22 13:24 seyjs 阅读(149) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:和【leetcode】198. House Robber 思路一样,也是动态规划。只不过本题新增了一个约束,就是nums[0]和nums[len(nums)-1]不能同时抢。那么我们可以分别针对nums[0]抢还是不抢这两种情况做两次动态规划。如果nums[0]抢的话,那么抢劫 阅读全文
posted @ 2018-06-19 17:54 seyjs 阅读(235) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:又是一个动态规划的场景,和爬楼梯问题的递推表达式有点类似。用dp[i](i>=3)表示从0开始到i这段子数组内可以抢劫的最大价值,对于nums[i]有两种做法,抢或者不抢,如果抢的话,dp[i-1]就不能抢了,那么dp[i] = dp[i-2]+nums[i];如果不抢,dp[ 阅读全文
posted @ 2018-06-19 17:47 seyjs 阅读(188) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题要求的是数组每个元素和所有排在这个元素后面的元素的值的二倍做比较。我们可以先把数组所有元素的二倍都算出来,存入一个新的数组newlist,并按升序排好。而后遍历nums数组的每个元素i,通过二分查找的方法在newlist中找到值比i小的元素中下标最大的那个(记为inx),那 阅读全文
posted @ 2018-06-13 11:07 seyjs 阅读(248) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题大多数人采用DFS的方法,这里我用的是另一种方法。我的思路是建立一次初始值为空的safe数组,然后遍历graph,找到graph[i]中所有元素都在safe中的元素,把i加入safe。遍历完graph后继续重头遍历,直到某一次遍历后无新元素加入safe后停止。safe即为题 阅读全文
posted @ 2018-06-12 15:38 seyjs 阅读(259) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题首先要很快速的计算出任意一个字符shift后会变成哪个字符,其实也很简单,让shift = shift % 26,接下来再做计算。第二部是求出每个字符要shift的次数。可以得出S[0]的shift次数等于sum(shifts),S[1]的次数等于sum(shifts)-s 阅读全文
posted @ 2018-06-12 10:24 seyjs 阅读(327) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题需要用到这么一个数学定理。对于任意三个整数a,b,k(k !=0),如果 a%k = b%k,那么(a-b)%k = 0。利用这个定理,我们可以对数组从头开始进行求和,同时利用字典保存余数(key:余数,value:最早出现这个余数的元素下标),每累加一个元素都对k取余数, 阅读全文
posted @ 2018-06-07 10:03 seyjs 阅读(288) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:因为given list长度最多是50,我的解法就比较随意了,直接用一个嵌套的循环,判断数组中每个元素是否是其他的subsequence,最后找出不属于任何元素subsequence的最长元素即可。 代码如下: 阅读全文
posted @ 2018-06-06 09:55 seyjs 阅读(230) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题有点意思。首先如果输入的两个字符串都为空,那么结果是-1;如果两个字符串长度不一样,那么结果是较长的字符串的长度,因为较长的字符串肯定是自身的子序列,但一定不是较短的字符串的子序列。那么接下来就是要考虑两个字符串长度相等的情况了。在长度相等的情况下,我们只要判断组成这两个字 阅读全文
posted @ 2018-06-06 09:45 seyjs 阅读(206) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题的关键是找出从升序到降序的转折点。开到升序和降序,有没有联想的常见的一个动态规划的经典案例--求最长递增子序列。对于数组中每一个元素的mountain length就是左边升序的子序列长度加上右边降序的左序列长度。对于右边降序,如果我们遍历数组,那么降序就是升序。那么我们要 阅读全文
posted @ 2018-06-04 10:24 seyjs 阅读(736) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:总结一下这么几点,一出一进,优先级队列排序,保证每次输出的都是当前的最小值。解法大致如图: 代码如下: 阅读全文
posted @ 2018-06-01 10:33 seyjs 阅读(215) 评论(0) 推荐(0)