算法题解
文章平均质量分 56
千灵域
腾讯WXG数据开发,主要进行golang、C++程序的开发,并协助维护Spark和Flink任务。博客会在工作之余侧重其他内容,主要集中在编程知识上。
个人博客的gitpage:https://www.challengefilter.com/
展开
-
leetcode 32题 Longest Valid Parentheses 解题报告
leetcode algorithm 32题 Longest Valid Parentheses 解题报告原题地址 这个题目一眼看过去就是用栈做,然后我就顺手写了个栈试了一些,结果就过了…… 然而这道题是归类在动态规划里面的,所以我后面会再尝试用动态规划的知识来解决,至少我花了两个小时还没有写出状态转移方程来,在看了答案之后才发现自己想的过于复杂栈解法用栈的话就很简单了,虽然很多括...原创 2018-09-05 22:29:11 · 195 阅读 · 0 评论 -
中山大学 算法设计与分析 期末项目:PI_CFLP问题的模拟退火与禁忌搜索求解
github地址文章目录思路算法架构贪婪自适应搜索算法模拟退火算法参数禁忌搜索算法参数源代码结果总表各个结果TSSA思路分别使用模拟退火算法与禁忌搜索算法求解。因为题目的精确求解算法时间复杂度很高,所以使用元启发式算法来求解。将原题目分为两个问题:1. 开放哪些工厂; 2. 用户分配给哪些工厂。 这样,就可以用一串01串来表示开放工厂列表,用一个整数串表示用户的工厂分配。因为工厂开放之间...原创 2018-12-23 11:26:36 · 1190 阅读 · 0 评论 -
leetcode 564. Find the Closest Palindrome
结果到最后都没有调试出来自己的程序,还是用了别人的……解题思路这道题目的意思是,给予一个数字,计算与这个数字距离最小的回文字符串(不能是自身),如果有距离相同的话选择最小的那个。首先考虑回文字符串的字符串根,比如对于1213,字符串根为12,12131的话为121。这时候很明显,如果不是回文字符串的话,查找回文根的自身、大1位和小1位,肯定有一个是对的(因为不知道哪一个)除此之外的还有4种...原创 2018-12-09 20:39:52 · 150 阅读 · 0 评论 -
leetcode 839. Similar String Groups 解题报告
很明显的一个隐式图下连通分量计数。下面是比较明显的一个思路,通过遍历所有点,对于以前没有访问过的点进行深度优先搜索找到该连通分量内的所有结点,并在一个数组内进行标记。整体来说是O(n^2)级别,比25%左右的C++代码快。#include <iostream>#include <vector>#include <string>#include <a...原创 2018-12-02 18:47:03 · 380 阅读 · 0 评论 -
leetcode 123. Best Time to Buy and Sell Stock III 解题报告
标签为Hard,动态规划题目与一般的股票题目类似,但是最多支持两次卖出操作,很容易想到多开一个维度。设F[i][j]为第i次操作后第j天卖出时能得到的最大收益有F[i][j]=max{F[i-1][0..j-1]}+prices[j]-min{prices[i]}(i<j)边界条件F[-1][0..size]=0时间复杂度为O(n^2),空间复杂度为O(n),速度相当慢,耗时为10...原创 2018-11-25 12:15:38 · 197 阅读 · 0 评论 -
leetcode 115 Distinct Subsequences
题目大意是给出两个字符串S和T,要求求出S中与T相匹配的子字符串的数量。子字符串可以通过从S中删除元素且不改变剩余元素顺序的方式得到。想法1这是个动态规划题目,从题目的描述中其实就有陷阱,因为按照删除方法的话很难以去构建状态转移方程。子字符串的构建可以通过增加的方式,即每次找到一个S与T相匹配的字符,直到找齐,这个思想的递归解法很容易写出来。当然,肯定会超时。既然如此,可以按照类似的思想来...原创 2018-11-18 14:48:04 · 142 阅读 · 0 评论 -
leetcode 97. Interleaving String (hard)
一道动态规划的hard级题目,虽然实际上也不算难。因为上一周做的动态规划题目的影响,开始的时候也没有想着去写状态转移方程,考虑直接用递归做记忆化搜索(实际上就是暴力搜索)class Solution {public: bool isInterleave(string s1, string s2, string s3) { return isinter(s1,s2,s3...原创 2018-11-10 18:17:44 · 216 阅读 · 0 评论 -
leetcode 87 scramble string
开始的想法:暴力模拟直接模拟,题目的意思是根节点下的两个孩子可以交换,就递归模拟。然而后面发现根节点的位置似乎并不是固定的,故失败。我的代码:错误代码#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;...原创 2018-11-04 09:18:08 · 176 阅读 · 0 评论 -
leetcode 99. recover binary search tree 算法题解
题目给出了一个二叉搜索树,这个二叉搜索树中有两个节点被错误地交换了,题目的要求是恢复这棵二叉搜索树。我第一时间冒出的想法就是暴力搜索,枚举所有节点,然后检查二叉搜索树是否符合要求,复杂度为O(n2)O(n^2)O(n2)。这个显然太暴力了,不是没有办法不会用这个方法。第二个想法就是分类讨论,两个节点交换可能会有零个/一个/两个节点与其左右节点不相容。这里我有点忘记二叉搜索树的定义,二叉搜索树要...原创 2018-10-21 17:07:28 · 141 阅读 · 0 评论 -
leetcode 72.Edit distance 解题报告
这是一道经典的动态规划的题目,虽然我自己也没有写出来状态转移方程就是了。用dp[i][j]来表示word1[0…i-1]转移到word2[0…j-1]的最小步数其中i的取值从1到word1.length(),j的取值从1到word2.length()很容易有边界条件:dp[i][0] = i,dp[0][j] = j,表示从一个前缀与空串的转移关系然后推导状态转移方程对于dp[i][j...原创 2018-10-28 10:48:02 · 178 阅读 · 0 评论 -
leetcode65 valid number 解题报告
leetcode 65 valid number 解题报告这道题目实际上很简单,至少我一眼看上去是这样子的,完全和它Hard的难度不相符合。然而这个踩的数量居然高达2k,这让我十分好奇。实际做起来……我认为出题人默认做题者知道两件事情:.的前后可以只有一个数字0是可以省略的单看这两条没有什么问题,但是题目自动省略了如下的样例:”-.8“ true“3.” true“.1” tr...原创 2018-09-29 17:15:44 · 257 阅读 · 0 评论 -
leetcode 149. Max Points on a Line
题目并不复杂,但是要考虑到的情况也是不少。需要注意一条线上有多个点的情况。第一种方法非常容易想到的是暴力枚举,即对于一个点而言,所有与它在同一条线上的点必定会有相同的斜率,所以只要记下相同斜率时的最大点数即可。这里有一个问题时如果所枚举点重复出现的时候比较麻烦,需要用另外一个变量记录下来。#include <iostream>#include <vector>...原创 2018-10-07 17:58:52 · 206 阅读 · 0 评论 -
leetcode 126. Word Ladder II解题报告
题目给出了一个单词表,一个起始单词和一个结尾单词,要求找出所有的最短路径。因为一开始没有看到找出所有路径,写的是双向BFS搜索,后面改了一下,使用BFS进行查找。将原本的parent数组改为了vector<vector<string>>以满足查找所有最短路径的需求。在BFS的过程中,通过遍历单词表的形式搜索可行的单词。对于可行的单词,如果没有访问过,则将其入队准备进行访...原创 2018-10-12 20:16:36 · 187 阅读 · 0 评论 -
leecode 4. Median of Two Sorted Arrays 解题报告
朴素解法求中位数一般是用归并排序,按照类似快排的思想求第k/2大的数。但是由于给定的两个数组都是有序的,一般第一眼看到这个问题,最先想到的就是两个数组做排序,然后输出中位数。不得不说leetcode的数据也是仁慈,居然直接就过了……这个思路实在是太简单了,就不讲了,看代码就好了。#include <string>#include <iostream>#include...原创 2018-09-23 10:08:42 · 119 阅读 · 0 评论 -
leetcode 10. Regular Expression Matching 解题报告
这道题单论难度倒是不难,但是要考虑的方面比较多,因此很容易掉进坑里去。题目的大意是模拟正则式匹配,合法的原串输入是26个小写字母,匹配正则串的输入是小写字母以及’.‘和’*’。这其中唯一比较麻烦的就是*了,因为它可以有0到原串长度的可能,所以我认为应该用递归来做(原来是用for循环,但是发现怎么都处理不好)首先考虑到正常匹配情况,正常匹配的时候如果没有*,则一切正常;如果有*,则需要去试探...原创 2018-09-23 12:16:03 · 178 阅读 · 0 评论 -
leetcode 863. All Nodes Distance K in Binary Tree 解题报告
题目题目的大致意思是给出一个二叉树,一个二叉树上的点和一个距离,要求二叉树上所有距离这个点指定距离的其他点。 因为二叉树是有向的,基于它给出的数据很难在不使用其他数据结构的情况下直接求出这个点,所以我先用这个二叉树建立了一个无向图,再从给定节点对无向图进行广度优先遍历,从中找出深度为K的点,并将这些点返回。总体来说比较简单。这里有一个问题是我中间使用了vector作为最后广搜时判断是否遍...原创 2018-09-15 17:19:23 · 395 阅读 · 0 评论 -
【洛谷P1309】瑞士轮
P1309瑞士轮本题同样是NOIP普及组第三题。因为太久没有做过题目了,先从普及组开始练习吧。题目内容思路1很显然想到的思路就是模拟,代码如下:#include <iostream>#include <vector>#include <utility>#include <algorithm>using namespace std;...原创 2019-09-02 20:59:45 · 509 阅读 · 0 评论