摘要:
题目如下: 解题思路:也没啥好说的,回溯法。 代码如下: 阅读全文
摘要:
题目如下: 解题思路:我的解法很简单,每次操作对除了最大值外的其他元素做+1的操作,直到把最小值加到和最大值一样大;这样的,原来的最大值变成了最小值,原来的次大值就变成了最大值。继续+1的操作,直到最小值和最大值相等。如下图,假设输入数组为[5,5,6,8,8],可以很明显的看出规律。 代码如下: 阅读全文
摘要:
题目如下: 解题思路:就三个字-线段树。这个题目是线段树用法最经典的场景。 代码如下: 阅读全文
摘要:
题目如下: 解题思路:和【leetcode】198. House Robber 思路一样,也是动态规划。只不过本题新增了一个约束,就是nums[0]和nums[len(nums)-1]不能同时抢。那么我们可以分别针对nums[0]抢还是不抢这两种情况做两次动态规划。如果nums[0]抢的话,那么抢劫 阅读全文
摘要:
题目如下: 解题思路:又是一个动态规划的场景,和爬楼梯问题的递推表达式有点类似。用dp[i](i>=3)表示从0开始到i这段子数组内可以抢劫的最大价值,对于nums[i]有两种做法,抢或者不抢,如果抢的话,dp[i-1]就不能抢了,那么dp[i] = dp[i-2]+nums[i];如果不抢,dp[ 阅读全文
摘要:
题目如下: 解题思路:本题要求的是数组每个元素和所有排在这个元素后面的元素的值的二倍做比较。我们可以先把数组所有元素的二倍都算出来,存入一个新的数组newlist,并按升序排好。而后遍历nums数组的每个元素i,通过二分查找的方法在newlist中找到值比i小的元素中下标最大的那个(记为inx),那 阅读全文
摘要:
题目如下: 解题思路:本题大多数人采用DFS的方法,这里我用的是另一种方法。我的思路是建立一次初始值为空的safe数组,然后遍历graph,找到graph[i]中所有元素都在safe中的元素,把i加入safe。遍历完graph后继续重头遍历,直到某一次遍历后无新元素加入safe后停止。safe即为题 阅读全文
摘要:
题目如下: 解题思路:本题首先要很快速的计算出任意一个字符shift后会变成哪个字符,其实也很简单,让shift = shift % 26,接下来再做计算。第二部是求出每个字符要shift的次数。可以得出S[0]的shift次数等于sum(shifts),S[1]的次数等于sum(shifts)-s 阅读全文
摘要:
题目如下: 解题思路:本题需要用到这么一个数学定理。对于任意三个整数a,b,k(k !=0),如果 a%k = b%k,那么(a-b)%k = 0。利用这个定理,我们可以对数组从头开始进行求和,同时利用字典保存余数(key:余数,value:最早出现这个余数的元素下标),每累加一个元素都对k取余数, 阅读全文
摘要:
题目如下: 解题思路:因为given list长度最多是50,我的解法就比较随意了,直接用一个嵌套的循环,判断数组中每个元素是否是其他的subsequence,最后找出不属于任何元素subsequence的最长元素即可。 代码如下: 阅读全文