![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 63
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode133——Clone Graph
题目大意:生成无向简单图的克隆图(图结构相同,结点是新建的)分析:DFS+MAP。DFS的趴很好思考,就是克隆当前结点,然后遍历它的邻接表dfs克隆即可。但是涉及一个问题——需要防止重复克隆同一个结点。所以需要类似visit数组一样的数据结构进行标记。采用map<key,value>=map<node,newNode>,记录node的克隆结点。访问node时...原创 2020-02-22 12:45:51 · 95 阅读 · 0 评论 -
poj1934——Trip
题目大意:按字典序输出两个字符串的最大公共子序列分析:LCS长度可以通过动规求得,但是输出所有LCS就要通过另一个数组来记录。last1[i][j]记录字符串1的前i位中j字符的lastindex,last2[i][j]记录字符串2的前i位中j字符的lastindex。然后dfs从后向前递归,当dp[last1[i][j]][last2[i][j]]等于LCS长度时说明j字符是LCS的一员,直...原创 2019-10-28 21:50:13 · 169 阅读 · 0 评论 -
leetcode107——Binary Tree Level Order Traversal II
题目大意:倒序层次遍历二叉树,先遍历最后一层,然后依次向上分析:bfs遍历放入队列中,遍历时将每一层放入一个数组里,最后翻转数组即可。注意我们要用到的每层的结点个数就是开始遍历该层时的队列元素个数,当for循环里面压入节点后size是会发生变化的。代码:/*** Definition for a binary tree node.* struct TreeNode {* int val;*...原创 2018-03-10 20:16:38 · 130 阅读 · 0 评论 -
leetcode101——Symmetric Tree
题目大意:判断一颗二叉树是否对称分析:dfs、bfs都可以代码:dfs转载自https://www.cnblogs.com/xiaozhuyang/p/7376749.html/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode...原创 2018-03-10 20:53:48 · 167 阅读 · 0 评论 -
poj3140——contestants division
题目大意:一棵树中n个结点,每个结点权值不同,问删掉一条边所形成的两个连通分量各自权值之差最小是多少输入:结点个数n 边个数m(1 ≤ n ≤ 100000) 第i个结点的权值(一共n个数,空格隔开) s t(一共m行,代表第s个和第t个结点之间有边) 0 0//代表结束输出:Case i:最小权值差分析:树形dfs——算出第i个结点为根...原创 2017-11-05 22:06:02 · 179 阅读 · 0 评论 -
leetcode399——Evaluate Division
题目大意:给出一些除法式子,除数和被除数都是字符串形式的字母,商是浮点型实数,根据给出的信息求出提问中的值分析:图论或者哈希表+dfs。 图论:将分子分母都当做图中的结点,商作为边权,然后只需要用floyd算法算出所求的两点之间是否有路径及路径权重即可。 dfs:首先将两个vector里面的数据读出来建立哈希表,string就是哈希map的key值,...原创 2018-03-21 17:01:48 · 205 阅读 · 0 评论 -
leetcode35——Search Insert Position
题目大意:找到目标数字应该插入所给不重复升序数组的下标位置分析:二分搜索。普通遍历也可以,二分查找的效率更高。代码:方法一:普通遍历class Solution {public: int searchInsert(vector<int>& nums, int target) { for (int i = 0;i < nums.size();i++) { if (nu...原创 2018-04-16 14:33:32 · 111 阅读 · 0 评论 -
leetcode34——Search for a Range
题目大意:在给出的升序数组中找出目标数字的起始和终止下标分析:二分搜索。不过发现普通遍历也挺快的。代码:方法一:普通遍历class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ans; int start = -1, en...原创 2018-04-16 15:02:34 · 159 阅读 · 0 评论 -
leetcode33——Search in Rotated Sorted Array
题目大意:在旋转排序数组中搜索目标数字是否存在分析:二分搜索的变形。直接搜肯定可以,但是由于是旋转排序数组,所以可以改善二分搜索的算法以得到更高的搜索效率。代码:转载自https://yq.aliyun.com/articles/861class Solution {public: int search(vector<int>& nums, int ta...原创 2018-04-16 16:34:57 · 104 阅读 · 0 评论 -
leetcode44——Wildcard Matching
题目大意:通配符匹配,问给出的两个字符串s和p是否匹配,其中s是小写字母组成的,p是由小写字母和?*组成的,?可以匹配一个字符,*可以匹配0~n个字符。分析:和leetcode10有点类似,不过本题不用dp求解,而是回溯搜索。难点在于*的匹配,下面介绍一种迭代回溯的思路。利用两个指针ss和pp来维护当前位置,当匹配失败时,s和p回溯到ss和pp的下一位置重新匹配。代码:c语言转载自https://...原创 2018-04-19 14:59:31 · 143 阅读 · 0 评论 -
leetcode46——Permutations
题目大意:列出所给数字的全排列分析:回溯法。这种枚举所有组合情况的题,首先考虑回溯。代码:方法一:逐步将数字添加到tmp中间集里。当tmp里面够个数了就将中间集加入结果集中。class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector&...原创 2018-04-19 16:26:32 · 137 阅读 · 0 评论 -
leetcode52——N-Queens II
题目大意:输出N皇后问题有多少个可行解分析:dfs回溯。代码:class Solution {public: int ans = 0; int totalNQueens(int n) { vector<int> cols(n); dfs(0, n, cols); return ans; } void dfs(int level, int n, vector<int>&...原创 2018-04-24 13:45:41 · 247 阅读 · 0 评论 -
leetcode78——Subsets
题目大意:求出所给数组的所有子集,数组中没有相同数字分析:回溯法。和上一道题一样,只不过上一道题k值固定,而这道题的k要从1~nums.size()。代码:class Solution {public: vector<vector<int>> ans; vector<vector<int>> subsets(vector<int>&...原创 2018-05-22 13:46:56 · 107 阅读 · 0 评论 -
leetcode100——Same Tree
题目大意:判断给出的两颗二叉树是否是完全相同的分析:dfs。递归遍历两颗树,从根节点开始比较,并递归比较左右子节点即可。代码:/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) ...原创 2018-06-24 19:46:57 · 115 阅读 · 0 评论 -
leetcode102——Binary Tree Level Order Traversal
题目大意:层次遍历二叉树分析:bfs代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), r...原创 2018-07-24 17:54:33 · 83 阅读 · 0 评论 -
leetcode103——Binary Tree Zigzag Level Order Traversal
题目大意:蛇形层次遍历二叉树分析:bfs代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL),...原创 2018-07-24 18:04:06 · 100 阅读 · 0 评论 -
leetcode109——Convert Sorted List to Binary Search Tree
题目大意:给出升序链表,根据它构建平衡二叉搜索树。分析:链表和dfs的考察。和leetcode108类似,找到链表的中间结点也就是根节点然后递归分别构建左右子树。注意巧妙的用快慢指针找到链表中间节点这一方法。代码:转载自https://www.cnblogs.com/hellowooorld/p/6624709.html TreeNode* sortedListToBST(Li...原创 2018-09-27 17:16:01 · 87 阅读 · 0 评论 -
leetcode733——Flood Fill
题目大意:给出一个图片中每块像素的颜色,从一个给出坐标的起始点开始,给它以及和他相邻且与它颜色相同的像素块染上新的指定颜色。例子:原题中给出的111 110 101,就是三乘三的图片,从第一个像素块开始染2号色分析:dfs遍历四个方向代码:class Solution {public: int dirx[4] = { -1,1,0,0 }; int diry[4] = { 0,0,-1,1 }; ...原创 2018-03-10 17:22:17 · 528 阅读 · 0 评论 -
leetcode695——Max Area of Island
题目大意:给出一张岛屿地图(0表示水,1表示岛),岛屿只能按照上下左右延伸,问最大的岛屿面积分析:dfs。代码:自己的代码:#include <cstring>class Solution {public: int dir[4][2] = { {-1,0},{1,0},{0,-1},{0,1} }; int maxAreaOfIsland(vector<vector<int...原创 2018-03-10 16:46:47 · 171 阅读 · 0 评论 -
leetcode690——Employee Importance
题目大意:给出某公司的上级下属关系和他们的价值,求出某个人和他所有下属的价值总和分析:dfs的应用。用map建立职员id和职员的映射关系方便后续dfs。代码:/*// Employee infoclass Employee {public:// It's the unique ID of each node.// unique id of this employeeint id;// the im...原创 2018-03-10 14:06:33 · 181 阅读 · 0 评论 -
poj2676——Sudoku
题目大意:9*9数独,每行每列和每个3*3的方块中都必须含有1~9九个数字,编写程序求解数独输入:(空格用0代替) case个数n 第i个case的9*9数独已知部分输出:(如果多解,输出任意一个即可) 9*9的数独解分析:dfs搜索(leetcode36:判断给出的数独是否合法;leetcode37:填写数...原创 2017-11-17 21:27:23 · 209 阅读 · 0 评论 -
poj1190——生日蛋糕
题目大意:制作一个每层都是圆柱体,体积Nπ的M层蛋糕,下层的比上层的半径更大,高度更高,找出每层适当的Ri和Hi使得蛋糕表面积(最下一层的下底面除外)Sπ最小,求S的最小值,以上数据皆为正整数输入:N(N <= 10000) M(M <= 20)输出:S(若无解输出0)分析:dfs+花式大剪枝 剪枝方法如下: 1.半径r,与高...原创 2017-11-20 21:17:12 · 234 阅读 · 0 评论 -
poj3083——Children of the Candy Corn
题目大意:从迷宫入口S走到出口E,可以沿着人物当前左手边的墙走,也可以沿着右手边的墙走,问分别经过的方块个数,以及S到E的最短路径输入:迷宫个数n 迷宫宽度(列数)w 迷宫高度(行数)h (w>=3,h 第i行迷宫的布局(#表示墙 .表示空路,迷宫四面除了入口S和出口E都是墙,SE至少间隔一个墙,且不在角落)输出:(第i个迷宫) 沿着左边墙走原创 2017-11-13 21:20:09 · 133 阅读 · 0 评论 -
poj1033——Defragment
题目大意:磁盘有N个簇,有K个文件的每个簇分散在磁盘上,将第一个文件的所有簇移到磁盘1...S1簇,第二个文件的所有簇移到磁盘S1+1...S1+S2簇,问如何用最少的移动次数来实现输入:N K(1 第i个文件所占的簇个数Si 第i个文件的第j个簇在磁盘中的编号 ... (1 输出:如果已经是最佳放置则输出No optimization needed原创 2017-11-20 20:10:31 · 336 阅读 · 0 评论 -
poj3414——Pots
题目大意:输入:输出:分析:代码:转载自原创 2017-11-15 17:27:50 · 140 阅读 · 0 评论 -
poj3278——Catch That Cow
题目大意:农夫和奶牛在同一水平线上分别两个位置N和K(0输入:N K输出:最少耗时分析:bfs搜索,注意剪枝(vis数组判断是否遍历过、n>=k时直接输出n-k、排除越界可能)代码:转载自https://www.cnblogs.com/shenben/p/5575387.html#include#include#include#includeusing namesp原创 2017-11-16 21:52:00 · 224 阅读 · 0 评论 -
poj1011——Sticks
题目大意:取一些长度相同的木棍,将他们切割成随意长度的小木棍,现在要将他们拼回原状,问每根原始木棍的长度最小值输入:(输入以0结束) 切割后的木棍个数(最多64个) 每个棍的长度(中间用空格分隔)输出:木棍的原长度最小值分析:dfs+剪枝 大致思路:最长的小木棍max,和所有小木棍长度的总和sum,那么原木棍长原创 2017-11-22 14:25:52 · 160 阅读 · 0 评论 -
poj1088——滑雪
题目大意:一个人在一个滑坡区域内滑雪,只能向下斜坡滑,问最长滑坡的长度输入:区域行数R 区域列数C(1 二维数组R*C(每个数字代表点的高度h)(0)输出:最长滑坡的长度分析:代码:转载自原创 2017-11-22 15:01:07 · 168 阅读 · 0 评论 -
poj1191——棋盘分隔
题目大意:原棋盘上每一格有一个分值,一块矩形棋盘的总分为各格分值之和,用n-1次将棋盘切割成n块,使得各个棋盘总分的均方差O'最小输入:n 8*8的非负整数(表示棋盘上相应格子的分值)输出:O'(四舍五入到小数点后三位)分析:dfs+dp 首先化简一下方差公式: ,也就是说将题目转化为求各个棋盘总分的平方和最小值。输入时预处理一下,在va...原创 2017-11-22 17:21:17 · 200 阅读 · 0 评论 -
poj1691——Painting A Board
题目大意:给一个包含N个矩形的板子上色,每个矩形的颜色已经确定,给一个矩形上色时,必须满足它上方的所有矩形已经上色结束,一个刷子只能用一次且涂满整个矩形,问最少需要多少个刷子输入:case个数M (1 第i个case的矩形个数N(1 N个矩形的描述(左上角坐标y x 右下角坐标y x(坐标0~99横坐标x纵坐标y) 颜色代码(代码1~2原创 2017-11-22 21:20:28 · 378 阅读 · 0 评论 -
poj3411——Paid Roads
题目大意:给出N个城市m条路(有向路),两个城市之间可能连有多条路,经过一条从城市ai到bi的路i的付费方式有两种,如果之前到过城市ci则付费Pi,否则就在到达bi时付费Ri,问从城市1到城市N的最小代价输入:N m 第i条路的描述(共m行, ai, bi, ci, Pi, Ri (1 ≤ m, N ≤ 10, 0 ≤ Pi , Ri ≤ 100, Pi ≤ Ri))原创 2017-11-23 14:49:40 · 198 阅读 · 0 评论 -
poj1724——ROADS
题目:Bob想从城市1去城市N,这些城市间有一些长度和花费不同的路共R条,两个城市之间可以有很多路(单向路),Bob只有K枚硬币,问他的最短路径输入:K(0 N(2 R(1 第i条路的描述(共R行,S D L T分别代表起点、终点、路长( 1 输出:最短路径长度(如果不存在输出-1)分析:dfs+剪枝/bfs原创 2017-11-23 15:58:38 · 218 阅读 · 0 评论 -
poj3373——Changing Digits
题目大意:给出两个正整数n和k,改变n中的数字变为m,使得m能被k整除,要求改变的数字个数最少,输入:(可以有多个case) 第i个case的n(1≤n≤10100) (1≤k≤104, k≤n) 第i个case的k输出:第i个case的m分析:dfs+记忆化 本题有大量的取模运算,所以先预处理(10^i)*j原创 2017-11-22 22:29:43 · 207 阅读 · 0 评论 -
poj1426——Find The Multiple
题目大意:给出一个正整数n,找出它的倍数m,要求m的十进制形式只由0和1组成并且不超过100位数字输入:(可以有很多个case,输入以0结尾) 第i个case的n(1输出:(如果有多个m,则输出任意一个) 第i个case的m分析:bfs搜索代码:转载自原创 2017-11-16 17:41:19 · 134 阅读 · 0 评论 -
poj1416——Shredding Company
题目大意:搞一个碎纸机,一张卡片上有几个数字,使剪碎后每张卡片的数字之和最接近目标数字并且不超过它,有三种特殊情况:如果卡片上数字是目标数字本身,就不用切碎了;如果怎么剪都没有解(比如剪成最小的都会使和超过目标数字),则输出error;如果有多个解,则输出rejected输入:(有多个case,输入以0 0结束) 第i个case的目标数字 第i个case卡片上的数字(原创 2017-11-16 22:31:16 · 181 阅读 · 0 评论 -
leetcode104——Maximum Depth of Binary Tree
题目大意:求二叉树的深度分析:简单dfs代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) ...原创 2018-03-10 11:32:55 · 87 阅读 · 0 评论 -
poj1129——Channel Allocation
题目大意:相邻中继器不能设置相同频道,否则会干扰信号,问在这个中继器网络中最少设置多少个频道输入:(有很多case,输入以0结束) 第i个case中地图包含的中继器个数n(1 第k个中继器的序号:与它相邻的站点序号(序号用大写字母表示,如果没有相邻站点则输入为A:)输出:? channel(s) needed(注意如果?为1则channe原创 2017-11-17 20:20:23 · 194 阅读 · 0 评论