
leetcode
文章平均质量分 92
chent86
在校大学生
展开
-
Climbing Stairs
题目:You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?Note: Given n will be a pos...原创 2018-09-06 13:50:25 · 134 阅读 · 0 评论 -
算法周计12.9
leetcode 327分析: 这一题是让我们在一个数组中找一系列区间,区间中的数求和的结果在lower与upper之间,我们需要计算出这样的区间的个数。解题:可以使用分治的思想来解这一题。首先,我们先计算出求和数组sum, 当需要计算区间[i,j]内的数的和时,只用求sum[j]-sum[i]就可以了。另外需要注意sum[0] = 0,这是为了计算区间[0,1]而保留的值。所以sum...原创 2018-12-09 23:43:44 · 232 阅读 · 0 评论 -
算法周记12.2
leetcode 152 分析: 可以在O(n)的时间复杂度之内解决问题,方式是在遍历的过程中记录乘积的最大值pos_value(大于等于0)和乘积最小值neg_value(小于等于0)。初始时这些值设为0。当遇到一个数a时:若a为正数,pos_value为a(考虑pos_value为0的情况)与pos_value*a之中的较大的值。neg_value为neg_value与a...原创 2018-12-02 17:50:01 · 320 阅读 · 0 评论 -
动态规划4
leetcode 63分析:需要注意到题目描述中:机器人只能向下或者向右移动,这一点大大降低了难度。所以可以列出转移方程:dp[i][j]表示从起点到(i,j)的路径的数量,那么:dp[i][j] = dp[i-1][j] + dp[i][j-1] (当这两个点在grid之内且不为障碍物时)另外,如果(i,j)是障碍物,dp[i][j] = 0代码如下:int...原创 2018-11-25 11:29:20 · 216 阅读 · 0 评论 -
动态规划3
leetcode 132分析:这一题需要使用两次dp。第一次dp需要找到所有回文子串,第二次dp需要找到最小切。而实际上,两个dp可以同时进行。首先是找出所有的回文子串:设dp[j][i]为1时表示子串s[j,i]是一个回文串,那么有:当s[j] == s[j], 且子串s[j,i]长度小于等于2或者dp[j+1][i-1]为1时dp[j][i] = 1其中,当j ...原创 2018-11-18 22:24:07 · 718 阅读 · 0 评论 -
动态规划2
leetcode 97 思路:一开始考虑怎么用动态规划解决问题,反而没什么头绪。于是改变思路,先不管动态规划,而是想如何解决这道题。可以肯定的是,如果s3的最后一个字符与s1和s2的最后一个字符都不同,那么将无法通过s1与s2的交错得到s3。假若s1与s2其中一个的最后一个字符与s3的最后一个字符相同(假设是s1,删除最后一个字符得到s1*,而s3删除最后一个字符得到s3*)。那么...原创 2018-11-11 18:19:56 · 141 阅读 · 0 评论 -
动态规划背包问题
1.01背包问题:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。分析:用dp[i][v]表示将前i个物品放入价值为v的背包能获得的最大价值计算dp[i][v]时,分两种情况:第i件物品选或者不选,二者中价值较大的值就是f[i][v]的值,即:dp[i][v]=max...原创 2018-11-04 19:01:27 · 580 阅读 · 0 评论 -
动态规划
动态规划介绍动态规划是一种功能强大的计算模式,其解决问题的方式是首先定义它的一组子问题,然后按照由小到大,以小问题的解答支持大问题求解的模式,依次解决所有的子问题,并最终得到原问题(最大子问题)的解答。leetcode 32 思路:设字符串长度为L,最长合法括号子字符串的长度为dp[L-1]。对于某个字符的下标k, dp[k]表示0到k的这个字符串中的最长合法括号子字符串的长...原创 2018-10-28 23:45:26 · 156 阅读 · 0 评论 -
并查集算法题
简要介绍:并查集: 一种数据结构,将一个集合分为不相交的子集,在添加新的子集,合并现有子集,判断元素所在集合时时间复杂度接近常数级。常用于求连通子图和最小生成树的Kruskal算法。操作: makeSet: 初始化,给每个元素分配一个特定的id,以及一个指向自己的指针,表示每个元素都在一个大小为1的集合当中。 find: 查找某个元素的根元素。当两个元素拥有...原创 2018-10-20 23:29:13 · 890 阅读 · 0 评论 -
图的一些算法题
leetcode 210There are a total of n courses you have to take, labeled from 0 to n-1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is ex...原创 2018-09-30 18:33:32 · 1851 阅读 · 0 评论 -
队列的一些算法题
leetcode 862 解题思路:一、先试试暴力求解。对于不同的起点1.如果起点是负数,终止2.起点依次向后累加,如果累加的值小于等于0,终止3.如果累加的值大于等于K,符合条件,记录长度。最后选取最短的长度复杂度为,超时。代码如下: int shortestSubarray(vector<int>& A, int K) { ...原创 2018-10-14 20:57:20 · 1859 阅读 · 0 评论 -
图的一些算法题2
leetcode 765N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum number of swaps so that every couple is sitting side by side. A swap consists of choosing ...原创 2018-10-07 21:10:47 · 396 阅读 · 0 评论 -
欧拉路径问题
leetcode 332Given a list of airline tickets represented by pairs of departure and arrival airports [from, to], reconstruct the itinerary in order. All of the tickets belong to a man who departs from...原创 2018-09-23 10:07:53 · 16053 阅读 · 0 评论 -
Divide and Conquer
分治算法通常需要三个步骤1.将原问题分解为一组子问题,每个子问题都与原问题类型相同,但是比原问题的规模小2.递归求解这些子问题3.将子问题的求解结果恰当合并,得到原问题的解leetcode 53Given an integer array nums, find the contiguous subarray (containing at least one number) ...原创 2018-09-16 19:20:46 · 872 阅读 · 0 评论 -
算法Project(变种背包问题)
问题描述:假设有n个商店和m位顾客,我们希望计算得到:(1)开放那些商店(2)安排哪位顾客去哪位商店来使得开销最小。其中:如果商店有安排到至少一位顾客,则商店需要开放营业,而这需要开销opening cost(每个商店的opening cost不同),另外安排某位顾客去某位商店的这一过程也需要开销assigning cost,且因商店的不同和顾客的不同而变化。也即: 总开销...原创 2018-12-23 00:14:26 · 437 阅读 · 0 评论