算法分析与设计
marlonlyh
生活不止眼前的苟且,还有诗和远方。
展开
-
LeetCode 646 : Maximum Length of Pair Chain(c++)
本题有点动态规划和贪心的意思。大意是找出能够组成符合题目要求的最长的链长度。题目已知在任何数对(a, b) 中,a < b;且数对(a, b)和 (c, d)能组成链当且仅当b < c。原创 2017-07-29 15:38:12 · 975 阅读 · 0 评论 -
第十五周:( LeetCode542) 01 Matrix(c++)
找出矩阵中非0的点和最近的0点的距离,已知上、下、左、右四个方向相邻的点的距离为1。其实就是逐个点做个广度优先搜索原创 2017-06-03 09:43:03 · 472 阅读 · 0 评论 -
第十五周:( LeetCode565) Array Nesting(c++)
求数组中最大环的长度原创 2017-06-02 10:40:17 · 359 阅读 · 0 评论 -
第十四周:( LeetCode593) Valid Square(c++)
给出四个点的坐标,判断这四个点能否构成正方形。原创 2017-05-21 23:52:56 · 886 阅读 · 0 评论 -
第十五周:( LeetCode600) Non-negative Integers without Consecutive Ones(c++)
本题用到的算法思想包括动态规划和分治,涉及到十进制和二进制的相互转化。以下算法时间复杂度为o(logn),过程有一点点繁琐但应该比较好理解,可能会有更简洁的思路。下面就简述一下我的思路吧。原创 2017-06-01 16:32:51 · 365 阅读 · 0 评论 -
第十五周:( LeetCode547) Friend Circles(c++)
求朋友圈的数目,其实就是求图中的连通区间个数,用dfs或者bfs即可。原创 2017-06-01 09:14:29 · 464 阅读 · 0 评论 -
第十六周:( LeetCode606) Construct String from Binary Tree(c++)
本题的本质就是树的先序遍历,因为要加上括号所以要注意一些细节的处理,也涉及到一些c++字符串的操作,要注意区别好例子一和例子二原创 2017-06-05 13:59:53 · 895 阅读 · 0 评论 -
第十三周:( Sicily1402) Panic Room(c++)
最大流经典问题原创 2017-05-18 23:24:37 · 250 阅读 · 0 评论 -
第八周:(LeetCode 516) Longest Palindromic Subsequence(c++)
原题: Given a string s, find the longest palindromic subsequence’s length in s. You may assume that the maximum length of s is 1000.原创 2017-04-10 00:00:01 · 272 阅读 · 0 评论 -
第十六周:(Sicily) Huffman Coding V1(c++)
哈夫曼编码原创 2017-06-07 23:13:26 · 625 阅读 · 0 评论 -
第十八周:( 期末机试模拟) 小黄车(c++)
期末机试模拟试题最后一题,BFS求解原创 2017-06-19 19:25:04 · 1626 阅读 · 0 评论 -
第十九周:( Sicily2014) Dairy Queen(c++)
这是一道关于背包问题的题目,但是跟传统的背包问题又略有不同。传统的背包问题一般是求最值的问题,而这题是求不重复的方法的种类的问题。其实主要思路都一样,不同是在状态转移方程。原创 2017-06-27 09:56:11 · 469 阅读 · 0 评论 -
课程期末作业:《算法概论》课后8.22题的证明
《算法概论》课后8.22题的证明过程原创 2017-06-27 11:02:32 · 1464 阅读 · 0 评论 -
第十九周:( LeetCode629) K Inverse Pairs Array(c++)
这是一道动态规划的题目。用dp[n][k]代表n个数(1-n)任意全排列中存在k对逆序数对的排列的数量总数。原创 2017-06-25 17:18:31 · 1054 阅读 · 0 评论 -
第十八周:( Sicily1750) 运动会(c++)
这是一道分组背包的题目。 分组背包的不同之处,就在于求f[k][v](表示前k组物品花费费用v能取得的最大权值)要遍历每一组的所有物品i,然后取其最大值保留在f[k][v]。原创 2017-06-23 16:22:03 · 794 阅读 · 0 评论 -
第十八周:( LeetCode621)Task Scheduler(c++)
这是一道贪心策略的题目。原题的大意有一定的操作系统知识背景,大致是说,给出任务集,每个时间片只能完成任意一个任务,同一类任务必须至少相隔n个时间片,求完成任务集的任务最少需要多少时间片。原创 2017-06-22 15:51:14 · 528 阅读 · 0 评论 -
第十七周:( Sicily1083) Networking(c++)
最小生成树,Prim算法求解原创 2017-06-10 20:12:23 · 555 阅读 · 0 评论 -
LeetCode 640 : Solve the Equation(python)
本题要求求解方程组,并且假定方程组只有加和减两种运算,同时只含有x一个未知数。原创 2017-07-11 11:08:14 · 730 阅读 · 0 评论 -
第十六周:( Sicily1321) Robot(c++)
单源最短路径,分别用Dijkstra和Bellman-Ford两种算法求解原创 2017-06-09 15:50:06 · 303 阅读 · 0 评论 -
第十三周:( LeetCode582) Kill Process(c++)
原题: Given n processes, each process has a unique PID (process id) and its PPID (parent process id). Each process only has one parent process, but may have one or more children processes.原创 2017-05-18 10:24:41 · 669 阅读 · 0 评论 -
第十二周:( LeetCode576) Out of Boundary Paths(c++)
这是一道新题,难度为Hard,类型为动态规划。原创 2017-05-08 15:30:08 · 430 阅读 · 0 评论 -
第十周:( Sicily1091) Maximum Sum(c++)
这是一道关于求和最大的相连子序列的题。用dp[i]表示以a[i]为结尾的和最大的相连子序列,此问题的状态转移方程为:dp[i]=max(a[i],dp[i-1]+a[i]),结果为max(dp[1],dp[2]…,dp[n])。本题相当于把数组分成两段,求(这两段的(和最大的相连子序列)的和)的最大值。原创 2017-04-23 22:41:44 · 276 阅读 · 0 评论 -
第五周:( Sicily1031) Campus(c++)
想找一道Dijkstra’s algorithm算法的题,由于leetcode上面没有相关的标签,搜索也不好搜,就找了sicily上面的一道题。许久没做sicily上的题,两个平台确实有所差异(leetcode不是纯黑盒测试,会提示哪组样例没过),确实还真有点不习惯,一些常见的坑全被我跳进去了,交了20次左右,time limited和wrong answer好久,最后才找到了两处小错误。原创 2017-03-23 10:25:29 · 349 阅读 · 0 评论 -
第六周:(LeetCode 45 55) Jump Game I II(c++)
这周教学的主题是贪心算法。贪心算法采取步步紧逼的方式构造问题的解,其下一步的选择总是在当前看来收效最快和效果最明显的那一个。贪心算法的难点在于“构造贪心的条件”以及验证其正确性。请看以下两道题。原题: Jump Game Given an array of non-negative integers, you are initially positioned at the first index原创 2017-03-29 21:58:44 · 289 阅读 · 0 评论 -
第六周:( Sicily1342) 开心的金明(c++)
原题链接:http://soj.sysu.edu.cn/1342思路:这是一道关于动态规划的背包问题。动态规划的难点就在于找到递推公式。在本题中,递推公式为:dp[i][j]=max(dp[i-1][j-v[i]]+p[i]*v[i],dp[i-1][j])。原创 2017-03-29 00:15:45 · 514 阅读 · 0 评论 -
第四周:( LeetCode494 ) Target Sum(c++)
原题:You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol. 本题笔者试图用四种方法求解,并逐一分析优劣。原创 2017-03-12 15:32:53 · 2080 阅读 · 0 评论 -
第三周:( LeetCode200 ) Number of Islands(c++)
原题:本题是经典的简单图论问题,求岛的个数也即求图上的连通区间的个数。可采用深搜或者广搜。假设共有n个点,时间复杂度为o(n)。本题笔者采用深搜的递归和非递归两种解法。将遍历过的“1”被改为“0”,其实达到的效果就是遍历完一个岛后,“把遍历过的岛变成海洋”。这是因为在下一次找岛的时候,找海洋和找遍历过的岛都一样没用。原创 2017-03-09 19:25:55 · 556 阅读 · 0 评论 -
第三周:( LeetCode 112 113 ) Path Sum I II(c++)
最近这一周进入了图的分解相关算法的学习,由于这方面以前做题的经验不多,因此每种算法应该会多做几道题,从最简单的dfs开始,本博文选的两道题:leetcode112、113,正是基于图(二叉树)的深度优先遍历的题。113比112多了一个保存路径的步骤,实际上差别不是特别大!原创 2017-03-08 20:16:45 · 295 阅读 · 0 评论 -
第一周:( LeetCode ) Best Time to Buy and Sell Stock I II III(c++)
算法分析与设计第一周题解,leetcode 题目三道 Best Time to Buy and Sell Stock 的解题思路和代码,用c++语言,题目跟动态规划有关,两道easy,一道hard,难度大约逐题加大!仅供参考,欢迎批评指正!原创 2017-02-24 13:43:24 · 315 阅读 · 0 评论 -
第二周:( LeetCode241 ) Different Ways to Add Parentheses(c++)
leetcode241 Different Ways to Add Parentheses的求解过程,主要采用分治的思想。原创 2017-03-03 16:25:09 · 467 阅读 · 0 评论 -
第六周:( Sicily1090) Highways(c++)
原题链接:求组成最小生成树的最长边的值。 已知最小生成树有一些比较重要的性质:(1)所有边权均不相同的无向图最小生成树是唯一的(2)如果存在某些边权值相同,一个图的最小生成树不一定是唯一的,但是组成这些最小生成树的各个边的权值一定都是一一对应相同的。原创 2017-03-30 19:10:47 · 450 阅读 · 0 评论 -
第四周:( LeetCode417 ) Pacific Atlantic Water Flow(c++)
原题: Given an m x n matrix of non-negative integers representing the height of each unit cell in a continent, the “Pacific ocean” touches the left and top edges of the matrix.原创 2017-03-16 19:07:29 · 390 阅读 · 0 评论 -
第十三周:( LeetCode583) Delete Operation for Two Strings(c++)
求字符串编辑距离的题,经典动态规划。原创 2017-05-14 11:22:56 · 466 阅读 · 0 评论 -
第十周:( LeetCode552) Student Attendance Record II(c++)
这是一道动态规划的题目,leetcode的划分的难度为Hard。其实思路并不难,但是 AC的过程略有曲折。原创 2017-04-23 17:30:13 · 353 阅读 · 0 评论 -
第七周:(LeetCode 300) Longest Increasing Subsequence(c++)
原题: Given an unsorted array of integers, find the length of longest increasing subsequence. 动态规划经典题目原创 2017-04-06 20:11:30 · 372 阅读 · 0 评论 -
第十一周:( LeetCode567) Permutation in String(c++ && python)
判断s2的连续子串中,是否存在s1的任意置换。原创 2017-05-01 17:04:17 · 677 阅读 · 0 评论 -
第九周:( LeetCode337) House Robber III(c++)
本周上课的重点依然为动态规划,主要讲树状dp、状态压缩dp、Floyd-Warshall算法。这是一道典型的树状dp的题,难度为Medium。原创 2017-04-19 09:23:59 · 461 阅读 · 0 评论 -
第八周:( Sicily1221) 数字游戏(c++)
原题链接:http://soj.sysu.edu.cn/1221 题意解读:黑板上写出了一行数字a1,a2,….an,然后给你m个回合的机会,每回合你可以从中选择一个数擦去它,接着剩下来的每个数字ai都要递减一个值bi。如此重复m个回合,所有你擦去的数字之和就是你所得到的分数。 求分数最大值。原创 2017-04-14 07:48:57 · 896 阅读 · 0 评论 -
第十一周:( LeetCode474) Ones and Zeroes(c++)
二维不可重复背包问题原创 2017-04-29 16:09:02 · 828 阅读 · 0 评论 -
第八周:(LeetCode 441) Arranging Coins(c++)
原题:You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins. Given n, find the total number of full staircase rows that can be formed.原创 2017-04-12 00:25:14 · 304 阅读 · 0 评论