
图
文章平均质量分 54
hestyle
戎码一生!
展开
-
LeetCode 冗余连接(查并集)
在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树...原创 2019-04-21 21:21:23 · 788 阅读 · 0 评论 -
LeetCode 翻转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。示例 1:输入: [[1,1,0],[1,0,1],[0,0,0]]输...原创 2019-05-26 10:59:18 · 250 阅读 · 0 评论 -
LeetCode 打砖块(逆向思维)
我们有一组包含1和0的网格;其中1表示砖块。 当且仅当一块砖直接连接到网格的顶部,或者它至少有一块相邻(4 个方向之一)砖块不会掉落时,它才不会落下。我们会依次消除一些砖块。每当我们消除 (i, j) 位置时, 对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这个消除而落下。返回一个数组表示每次消除操作对应落下的砖块数目。示例 1:输入:grid = [[1,0,0,0],[1,1...原创 2019-05-17 11:22:41 · 726 阅读 · 0 评论 -
LeetCode 保持城市天际线
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。建筑物高度可以增加的最大总和是多少?示例:...原创 2019-05-18 08:52:55 · 450 阅读 · 6 评论 -
LeetCode 图像重叠(蛮力法)
给出两个图像 A 和 B ,A 和 B 为大小相同的二维正方形矩阵。(并且为二进制矩阵,只包含0和1)。我们转换其中一个图像,向左,右,上,或下滑动任何数量的单位,并把它放在另一个图像的上面。之后,该转换的重叠是指两个图像都具有 1 的位置的数目。(请注意,转换不包括向任何方向旋转。)最大可能的重叠是什么?示例 1:输入:A = [[1,1,0], [0,1,0],...原创 2019-05-27 19:45:13 · 625 阅读 · 0 评论 -
LeetCode 相似字符串组(图连通分量、查并集)
如果我们交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”...原创 2019-05-31 15:41:01 · 818 阅读 · 0 评论 -
LeetCode 钥匙和房间(深度、广度优先搜索)
有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 ...原创 2019-05-31 16:19:52 · 805 阅读 · 0 评论 -
LeetCode 访问所有节点的最短路径(广度优先搜索)
给出 graph 为有 N 个节点(编号为 0, 1, 2, …, N-1)的无向连通图。graph.length = N,且只有节点 i 和 j 连通时,j != i 在列表 graph[i] 中恰好出现一次。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。示例 1:输入:[[1,2,3],[0],[0],[0]]输出:4解释:一...原创 2019-06-02 09:44:11 · 3292 阅读 · 0 评论 -
LeetCode 矩形面积II(扫描法)
我们给出了一个(轴对齐的)矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标,(x2,y2)是该矩形右上角的坐标。找出平面中所有矩形叠加覆盖后的总面积。 由于答案可能太大,请返回它对 10 ^ 9 + 7 取模的结果。示例 1:输入:[[0,0,2,2],[1,0,2,3],[1,0,3,1]...原创 2019-06-02 14:18:07 · 1259 阅读 · 2 评论 -
LeetCode 细分图中的可到达结点(图)
从具有 0 到 N-1 的结点的无向图(“原始图”)开始,对一些边进行细分。该图给出如下:edges[k] 是整数对 (i, j, n) 组成的列表,使 (i, j) 是原始图的边。n 是该边上新结点的总数然后,将边 (i, j) 从原始图中删除,将 n 个新结点 (x_1, x_2, …, x_n) 添加到原始图中,将 n+1 条新边 (i, x_1), (x_1, x_2), (x_2...原创 2019-06-13 20:44:27 · 582 阅读 · 0 评论 -
LeetCode 获取所有钥匙的最短路径(位操作+广度优先搜索)
给定一个二维网格 grid。 “.” 代表一个空房间, “#” 代表一堵墙, “@” 是起点,(“a”, “b”, …)代表钥匙,(“A”, “B”, …)代表锁。我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间。我们不能在网格外面行走,也无法穿过一堵墙。如果途经一个钥匙,我们就把它捡起来。除非我们手里有对应的钥匙,否则无法通过锁。假设 K 为钥匙/锁的个数,且满足 1 &l...原创 2019-06-08 16:36:38 · 783 阅读 · 0 评论 -
LeetCode 相似度为K的字符串(广度优先搜索)
如果可以通过将 A 中的两个小写字母精确地交换位置 K 次得到与 B 相等的字符串,我们称字符串 A 和 B 的相似度为 K(K 为非负整数)。给定两个字母异位词 A 和 B ,返回 A 和 B 的相似度 K 的最小值。示例 1:输入:A = "ab", B = "ba"输出:1示例 2:输入:A = "abc", B = "bca"输出:2示例 3:输入:A = "abac...原创 2019-06-03 16:13:41 · 883 阅读 · 0 评论 -
LeetCode 蛇梯棋(题意有点绕~)
在一块 N x N 的棋盘 board 上,从棋盘的左下角开始,每一行交替方向,按从 1 到 N*N 的数字给方格编号。例如,对于一块 6 x 6 大小的棋盘,可以编号如下:玩家从棋盘上的方格 1 (总是在最后一行、第一列)开始出发。每一次从方格 x 起始的移动都由以下部分组成:你选择一个目标方块 S,它的编号是 x+1,x+2,x+3,x+4,x+5,或者 x+6,只要这个数字 <...原创 2019-06-23 21:02:20 · 1962 阅读 · 1 评论 -
深度优先搜索和广度优先搜索算法的简单对比实例一 二维数组模拟地图上的点移动
此实例是解决寻找一张地图上(二维数组模拟的)从一个点到达另外指定的一个点需要的最少的移动步骤,其中地图上某点可能是障碍物不能跨越 地图信息约定:0表示空地,1表示目的地,-1表示障碍物,(0,0)表示的是默认起始点一、深度优先搜索法 从初始起点开始对四个方向进行穷举,直到遇到目的点,递归的调用自己#include&amp;lt;iostream&amp;gt;using namespace std;...原创 2018-08-10 21:40:36 · 1363 阅读 · 0 评论 -
深度优先和广度优先搜索的简单比较实例二 图(无向)的遍历
图(无向)的储存使用邻接矩阵(二维数组模拟) 约定:a[i][j]==1表示i+1点和j+1点有边连接,a[i][j]==0表示没有边连接,a[i][j]==-1表示的是i==j即同一个点一、深度优先搜索法 “不撞南墙不回头式”的搜索,不从A点开始,先搜索一个与它有边的点,重复此操作,直到找不到点与当前点有边,则返回上一个点,寻找它是否还有其他与它有边且没有被访问过的点,有就继续前面的操作...原创 2018-08-11 19:49:30 · 1162 阅读 · 0 评论 -
LeetCode 找到最终的安全状态(深度优先搜索+备忘录)
在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数 K, 无论选择从哪里开始行走, 我们走了不到 K 步后必能停止在一个终点。哪些节点最终是安全的? 结果返回一个有序的数组。该有向图有 N 个节点,标签为 0, 1,...原创 2019-05-16 16:38:42 · 579 阅读 · 0 评论 -
LeetCode K站中转内最便宜的航班(回溯法、动态规划)
有 n 个城市通过 m 个航班连接。每个航班都从城市 u 开始,以价格 w 抵达 v。现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 k 站中转的最便宜的价格。 如果没有这样的路线,则输出 -1。示例 1:输入: n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]src = 0, ...原创 2019-05-12 11:08:01 · 3773 阅读 · 2 评论 -
LeetCode 摘樱桃(动态规划)
一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示:0 表示这个格子是空的,所以你可以穿过它。1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它。-1 表示这个格子里有荆棘,挡着你的路。你的任务是在遵守下列规则的情况下,尽可能的摘到最多樱桃:从位置 (0, 0) 出发,最后到达 (N-1, N-1) ,只能向下或向右走,并且只能穿越有效的格子...原创 2019-05-02 19:14:58 · 3596 阅读 · 1 评论 -
LeetCode 岛屿的最大面积(深度优先搜索)
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,...原创 2019-04-23 18:11:20 · 2799 阅读 · 0 评论 -
图的最短路径:Floyd、DisjKstra、Bellman-Ford、SPFA算法
问题描述:给定一个有向图的邻接矩阵graph,graph[i][j]表示点i到点j的路径长,我们需要对图进行稀疏,将graph[i][j]转换为点i到点j的最短路径长。图的稀疏是图中比较经典的问题,常见的算法有Floyd、DisjKstra、SPFA算法,下面将进行详述。一、Floyd算法\color{blue}{Floyd算法}Floyd算法Floyd-Warshall算法(Floyd-...原创 2019-05-03 11:20:00 · 1618 阅读 · 2 评论 -
LeetCode 网络延迟时间(图的最短路径问题)
问题描述:有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。注意:N 的范围在 [1, 100] 之...原创 2019-05-03 11:29:04 · 4369 阅读 · 2 评论 -
LeetCode 病毒隔离
class Solution {public: vector<pair<int, int>> directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int containVirus(vector<vector<int>>& grid) { int res = 0, ...原创 2019-05-03 20:54:03 · 606 阅读 · 0 评论 -
LeetCode 为高尔夫砍树(广度优先)
你被请来给一个要举办高尔夫比赛的树林砍树. 树林由一个非负的二维数组表示, 在这个数组中:0 表示障碍,无法触碰到.1 表示可以行走的地面.比1大的数 表示一颗允许走过的树的高度.你被要求按照树的高度从低向高砍掉所有的树,每砍过一颗树,树的高度变为1。你将从(0,0)点开始工作,你应该返回你砍完所有树需要走的最小步数。 如果你无法砍完所有的树,返回 -1 。可以保证的是,没有两棵树的...原创 2019-04-20 12:19:01 · 501 阅读 · 0 评论 -
LeetCode 最大加号标志(图解)
class Solution {public: int orderOfLargestPlusSign(int N, vector<vector<int>>& mines) { vector<vector<int>> grid(N, vector<int>(N, 1)); for (auto...原创 2019-05-05 20:10:28 · 1288 阅读 · 0 评论 -
LeetCode 图像渲染(深度优先搜索)
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始...原创 2019-04-30 18:18:36 · 475 阅读 · 0 评论 -
LeetCode 滑动谜题(广度优先搜索)
在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换.最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。示例:输入:board = [[1,2,3]...原创 2019-05-09 15:09:03 · 1001 阅读 · 1 评论 -
LeetCode 所有可能的路径(回溯法)
给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。示例:输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这样的:0--->...原创 2019-05-15 10:39:10 · 2594 阅读 · 0 评论 -
LeetCode 有效的井字游戏(测试灰常丰富!)
用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。该游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。“X” 和 “O” 只允许放置在...原创 2019-05-15 12:10:52 · 1401 阅读 · 0 评论 -
LeetCode 水位上升的泳池中游泳(广度优先搜索)
在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的。当然,在你游泳的时候你必须待在坐标方格里面。你从坐...原创 2019-05-10 15:29:28 · 1420 阅读 · 0 评论 -
LeetCode 最大人工岛(深度优先搜索)
在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地。进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)示例 1:输入: [[1, 0], [0, 1]]输出: 3解释: 将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。示例 2:输入: [[1, 1], [1, 0]]输出: 4解释: 将一格0变...原创 2019-05-24 15:25:08 · 825 阅读 · 0 评论 -
LeetCode 判断二分图(bfs)
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i...原创 2019-05-11 11:39:08 · 1197 阅读 · 0 评论 -
深度优先搜索法实例一 模拟导航软件线路规划
使用二维数组模拟地图信息,a[i][j]==0表示i==j即同一地点,a[i][j]==-1表示i无法到达j(但是j可能可以到达j),a[i][j]==n(n>0)表示从i到j行驶的路程为n,利用深度优先搜索法找出一条条线路,再挑选出最短的那条#include<iostream>using namespace std;int min = 999999;//初始置为一个较大...原创 2018-08-11 20:04:33 · 772 阅读 · 0 评论