leetcode
文章平均质量分 57
yuhai_
这个作者很懒,什么都没留下…
展开
-
Add Two Numbers
Add Two Numbers题目描述You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two nu原创 2017-09-22 12:07:48 · 143 阅读 · 0 评论 -
Partition Equal Subset Sum
题目描述解题思路题目大意如下:对于一个非空的且全都是正数的数组,能否将其分成两个和相等的数组。显然若该数组总和为偶数是必须的,那接下来问题是怎么从这个总和是偶数的数组中找出特定的一些数,使它们的和是总和的一半呢?课上老师讲的方法这里简要记录一下,动态规划的思想:即定义一个一维的dp数组(bool类型或01变量都可),dp[i]为true时表示数字i可以是原数组中的任意个数之和,最后只需要返回dp[t原创 2017-12-08 00:49:36 · 143 阅读 · 0 评论 -
Number of Longest Increasing Subsequence
题目描述解题思路题目要求我们在一个无序的整数数组里找出最长递增子序列的个数,显而易见,我们可以先找到最长递增子序列对应的长度是多少,接着就是要找这么长的递增子序列有多少个。 针对最长递增子序列,可以选用传统的动态规划解法LIS来解决,即dp[i]代表以下标i对应的数字结尾的序列中最长递增子序列的长度,那么dp[i]就应该在下标i之前比nums[i]数值小的dp长度中取最大值。 但之后的难题是怎么原创 2017-12-23 16:58:21 · 157 阅读 · 0 评论 -
712. Minimum ASCII Delete Sum for Two Strings
题目描述解题思路题目大意如下:要从两个string里删除掉个别字母,使得剩下的字符串相等,并且有个要求——删除掉的字母总的ASCII码值要是最小的。这是典型的动态规划题目,思考之处,我觉得与寻找两个字符串的最长公共子序列有异曲同工之妙,但仔细一想,这两道题目虽然类型相同,但却还不是同一道题目,因为最长公共子序列的数目一定,但却有多种可能,而每种可能对应删除的ASCII码总值却不尽相同,因此还是得老老原创 2017-12-06 00:47:48 · 176 阅读 · 0 评论 -
Knight Probability in Chessboard
题目描述解题思路题目大意如下:一个N*N的棋盘,给定一个骑士的初始位置(r,c),再给一个步数限制K,表示这个骑士刚好可以走K步(每一步有8种走法,即“日”字型走法),问走过K步后还在棋盘内的可能。 这道题目和out of boundary path有异曲同工之处,因为每一步都有8种走法,那么K步就有8^K种可能,而我们只需要找出在这8^K种可能里有多少种是还未走出边界的,解法类似,但这里为了节省原创 2017-12-21 01:18:56 · 163 阅读 · 0 评论 -
Out of Boundary Paths
题目描述解题思路题目大意如下:给你一个m行n列的棋盘,再给你一个足球的初始位置,问在最多走N步(每一步只有向上、向下、向左、向右的方向可以选)的情况下,有多少条路径可以走出棋盘边界。 解题思路如下:因为最多可以走N步,而每一步都有四种方向可以选,如果是穷举的话显得不大可能,这时候可以考虑用动态规划,即要想找到在位置(i,j)最多走N步有多少条路径可以走出边界,可以先找到在位置(i,j)走了一步之后原创 2017-12-21 00:07:54 · 619 阅读 · 0 评论 -
Best Time to Buy and Sell Stock with Transaction Fee
题目描述解题思路整理要点如下: 1.因为每笔交易都会有交易花费,所以不能无限制的交易 2.在你买股票之前一定要先把手中的股票卖掉 也就是说第i天要么有股票准备卖出去或者留着不卖,而第i天的股票可能是第i-1天没有卖的,与有可能是第i-1天卖之后第i天买的,所以抽象出来为了得到在第i天得到最大利益,用两个一维数组考虑。sold[i]代表第i天卖掉股票此时的最大利润,hold[i]代表第i天不卖股原创 2017-12-03 21:35:13 · 175 阅读 · 0 评论 -
Maximum Length of Repeated Subarray
Maximum Length of Repeated Subarray题目描述解题思路题目属于动态规划一栏,自然会下意识通过动态规划方面的思想去想对策,动态规划算法的核心便是状态与状态转移方程,即当前的状态需要依靠前一个状态的值。而在本题中我完全可以用C[i][j] 来表示各自数组分别以A[i] 和 B[j] 结尾的最长公共子串的长度,如果A[i]==B[j],C[i][j]=C[i−1][j−1]原创 2017-11-23 18:02:23 · 203 阅读 · 0 评论 -
Partition to K Equal Sum Subsets
题目描述解题思路题目大意如下,给你一个一维int数组,且每个数大于0,再给你一个数字k,问是否可以将该数组分成k个子集,这k个子集的并集刚好为该int数组,交集为空,最关键的是,这k个子集每个子集的数字之和都相等。 仔细思考不难发现,要想满足题意,首先应该判断这个int数组的总和sum是否可以整除k,若能整除则就到了本题目的难点,怎么才能刚好划分成k个子集每个子集的数字和等于sum/k呢? 我想原创 2017-12-20 00:26:31 · 330 阅读 · 0 评论 -
String to Integer (atoi)
题目描述解题思路题目要求将一个字符串转换成整数,难度一般,主要是对于输入情况以及返回值情况的考虑比较多,根据题目要求主要有以下几点:The function first discards as many whitespace characters as necessary until the first non-whitespace character is foundThen, startin原创 2017-10-27 11:43:30 · 211 阅读 · 0 评论 -
Longest Palindromic Substring
题目描述解题思路题目要求从一个字符串s的子字符串中找到一个最长的回文字符串,那么解题思路显而易见,1是要求子字符串是回文字符串,2是要求该字符串是最长的。 回文字符串有个显然的特征是沿着中心那个字符轴对称。所以对于每个字符串我们只需要从中心向两端展开,观察两端的字符是否相同即可判断是否为回文字符串,而最长这一点,我们可以设置个变量longest,每次遍历完一个子字符串都与longest做比较。这样原创 2017-10-27 11:24:16 · 130 阅读 · 0 评论 -
2 Keys Keyboard
题目描述解题思路题目大意自不必说,至于说解法,这道题目有想过往动态规划方面去想,但想着想着就想偏了,最后另辟蹊径,通过对数字本身的研究而解出本题。大致思路如下: 对于n个字符A,如果想要找出最小的复制粘贴步数,为何不从它的因数找起呢?以42为例,42=21*2=7*3*2,也就是说我要先复制初始的一个A,粘贴得到一个A之后,再复制这两个A,粘贴2次得到6个A,再复制这6个A,粘贴6次就可以得到42原创 2017-12-27 23:18:15 · 265 阅读 · 0 评论