![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
cjl707408282
这个作者很懒,什么都没留下…
展开
-
LeetCode 486: Predict the Winner 解题与思考
LeetCode 486: Predict the Winner 解题与思考[原题链接]题目描述一组数字,两人轮流去取,每次只能取头部或者尾部,直到把所有数字取完,拿到最大的数字和的获胜,返回先手的人是否可以获胜。思路这个问题和人工智能中的一个最大最小搜索算法类似,有兴趣的可以查找。解决问题的突破口在于,确立先后手概念。 也就是说,在第一个人(不妨命名为A)先选择一个数字后,他就相当于在剩余的数列原创 2018-01-02 12:03:54 · 222 阅读 · 0 评论 -
LeetCode 343: Interger Break 解题与思考
LeetCode 343: Interger Break 解题与思考[原题链接]题目描述要求将一个数分解为至少两个正整数,并要求求分解之后的所有数的乘积最大,求这个最大值。思路:不妨设我们要求的结果为$S(n)$。 假设有自然数n,将其划分成自然数j(j取值1到n-1),以及其余部分n-j,那么显然其能取得的最大乘积为$j*S(n - j)$,在这种情况下该问题有着最优子结构,问题转换成求在n-j原创 2018-01-02 11:11:37 · 160 阅读 · 0 评论 -
LeetCode 123: Best Time to Buy and Sell Stock 3 解题与思考
LeetCode 123: Best Time to Buy and Sell Stock 3 解题与思考[原题链接]题目描述这次你只能买两次,依旧需要先抛掉手上的才能买下一只,求最大利润思路可以先将数列切割成两部分,我在左边获得的最大利润加上右边的最大利润,其最大值则为所求。也就是说可以变成两个LeetCode 121求解。不过要注意的是直接调用121的函数会超时,所以还要稍微作修改。我们在121原创 2017-10-31 21:33:14 · 210 阅读 · 0 评论 -
LeetCode 122: Best Time to Buy and Sell Stock 2 解题与思考
LeetCode 122: Best Time to Buy and Sell Stock 2 解题与思考[原题链接]题目描述相比上一道题,这次你可以买很多次,但是你每次最多只能持有一只股票:你在抛出上一只股票之前无法买下一只。求最大利润思路一旦即将降价就抛售,即将升价就买入,没什么好说的算法顺序遍历数组,记录一下是否上升下降,是否需要买入卖出代码#include <iostream>#inclu原创 2017-10-31 20:50:46 · 191 阅读 · 0 评论 -
LeetCode 121: Best Time to Buy and Sell Stock 解题与思考
LeetCode 121: Best Time to Buy and Sell Stock 解题与思考[原题链接]题目描述给定一个数列{ana_n},其中aia_i 为第i天的股票价格, 假设你在这些天只能选择买入卖出一次,求最大利润。思路自然我们不能简单地通过寻找最大最小值来确定哪天买入卖出,因为这样可能高开低走,得到错误结果。不过我们可以在顺序扫描数组时,维护扫描过的数的最小值以及扫描过的数中的原创 2017-10-31 20:32:42 · 157 阅读 · 0 评论 -
LeetCode 679: 24 Game 解题与思考
LeetCode 679: 24 Game 解题与思考[原题链接]题目描述就是24点啦,给你四个数字,判断能否得出24点思考没得讲,直接枚举 看起来真的挺荒谬:不过仔细想想,4个数字全排列24种可能,3个符号64种可能,对称重复除以2,总共也不超过24 × 64 ÷2 = 768种可能;考虑加法和乘法的交换,情况还要更少一点算法枚举也没什么算法可言了代码#include <iostream>#i原创 2017-10-31 20:04:14 · 1290 阅读 · 0 评论 -
LeetCode 410: Split Array Largest Sum 解题与思考
LeetCode 410: Split Array Largest Sum 解题与思考[原题链接]题目描述给定一个数列{ana_n},以及集数m,要求在不改变{ana_n}中元素先后顺序的前提下,将其分成m个子集,每个子集中的数字求和,题目寻找一个分法,使得所有和中的最大值最小。思路万事万物皆可DP,真的一开始想的就是将这个问题分解为两个子数列,其中一个作为一个集合,另外一边则变为求某个数列分成m-原创 2017-10-31 18:19:27 · 818 阅读 · 0 评论 -
LeetCode 514: Freedom Trail 解题与思考
LeetCode 514: Freedom Trail 解题与思考[原题链接]题目描述我们有一个轮盘,轮盘上有一个首尾相接的字符串S,我们有如下操作 1、转轮盘到下一个或者上一个字符,需要一步操作 2、输出当前字符,需要一步操作 假如我们有目标字符串K,求取出K的最小操作步数思路第一感觉就是用DP,因为看上去除去末尾的“上一个字符串”所需要的距离,加上从上一个最小距离,然后求极小值,就是所需答原创 2017-10-30 20:53:56 · 440 阅读 · 0 评论 -
LeetCode 94: Binary Tree Inorder Traversal 解题与思考
LeetCode 94: Binary Tree Inorder Traversal 解题与思考[原题链接]题目描述实现非递归的树的中序遍历思路当然也还是和之前的后序遍历一样要用到栈,这次将节点输出的时间是访问其右子树之前。 而当我们在栈中找到一个节点时,它很明显是之前被我们访问过,并在访问左子树之前压栈的;那么我们只要选择在需要用到栈顶元素时输出就好。算法前期准备:一个节点栈,一个答案数组 1原创 2017-10-11 01:01:45 · 137 阅读 · 0 评论 -
LeetCode 144: Binary Tree Preorder Traversal 解题与思考
LeetCode 144: Binary Tree Preorder Traversal 解题与思考[原题链接]题目描述实现非递归的树的前序遍历思路当然也还是和之前的后序遍历一样要用到栈,而最好的地方就是当前节点访问完就可以立即输出。不过当前节点还是要依次压栈的,因为你还要通过栈内的点来确定什么时候访问它的右子树。算法前期准备:一个节点栈,一个答案数组 1、对于一个节点,将其入栈,并且将其加入答案原创 2017-10-11 00:56:08 · 134 阅读 · 0 评论 -
LeetCode 23:Merge k Sorted Lists 解题与思考
LeetCode 23:Merge k Sorted Lists 解题与思考[原题链接]题目描述将若干个有序数列合并成一个,简单点说就是归并排序的第二步思路很显然,只需要对所有数列的头部进行遍历,每遍历一次取出最值就好。当然,作为通过率较低的hard题目,其需要考虑的情况也不少。我最先想到的是需要判断数列顺序的升降序,结果没能ac,因为leetcode还特别喜欢测试空数组的情况。不过只要好好考虑了这原创 2017-09-24 22:54:44 · 122 阅读 · 0 评论 -
LeetCode 145:Binary Tree Postorder Traversal 解题与思考
LeetCode 145:Binary Tree Postorder Traversal 解题与思考[原题链接]题目描述就是非递归的二叉树后续遍历思路通常来讲,将递归变为循环,都会想到用栈来模拟递归的过程;本题也不例外,只是需要考虑何时入栈何时出栈。假设我们访问到一个节点,此时它的左右子树未访问;我们按照后序遍历的顺序,先访问左子节点,此时我们应该将当前节点压栈,因为在将左子树访问完毕之后,我们需要原创 2017-09-17 22:26:01 · 225 阅读 · 0 评论 -
LeetCode 312: Brust Balloon 解题与思考
LeetCode 312: Brust Balloon 解题与思考[原题链接]题目描述题目会输入一个长度为n的数列ana_n(n从0开始算),你需要从中按照一定顺序取出所有的数字;每次取出一个数字aka_k时,你将得到该数字与其左右相邻数字的乘积的分数ak−1∗ak∗ak+1a_{k - 1} * a_k * a_{k+1}。 几点注意:最左边的数的左边,以及最右边的数的右边视为1(a−1=an原创 2017-09-10 01:05:49 · 872 阅读 · 0 评论