摘要: 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。看到该题我选择的方式为广度优先搜索(bfs),遍历每一个为1的点,然后从该点广度优先搜索,搜索到几个集合就代表有几个岛屿。程序代码如下:int numIslands(vector>& grid... 阅读全文
posted @ 2020-04-20 16:44 ~吹梦到西洲~ 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 由 n 个连接的字符串 s 组成字符串 S,记作 S = [s,n]。例如,["abc",3]=“abcabcabc”。如果我们可以从 s2 中删除某些字符使其变为 s1,则称字符串 s1 可以从字符串 s2 获得。例如,根据定义,"abc" 可以从 “abdbec” 获得,但不能从 “acbbe” 获得。现在给你两个非空字符串 s1 和 s2(每个最多 100 个字符长)和两个整数 0 ≤ n1... 阅读全文
posted @ 2020-04-19 10:35 ~吹梦到西洲~ 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。在该题中,不能到达最后一个位置的原因只有中间出现了0,然而0前面的元素无法跨过0,这样便不能到达最后一个位置,因此我们就寻找这样的情况,需要注意的是,如果最后一个元素是0,那我们不需要跨过这个0,只需要到达这个0即可,程序代码如下:bool canJump(... 阅读全文
posted @ 2020-04-17 11:20 ~吹梦到西洲~ 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 给出一个数组,每个元素是一个区间,题目要求将重叠的区间进行合并,首先我们根据区间的左顶点值进行排序,排序之后的区间,需要合并的一定相邻,在看完标准答案之后,我学会了对vectorback元素直接进行修改,程序代码如下,这里排序我使用了快速排序:void quicksort(int left, int right, vector& intervals){ if(left >= right) ... 阅读全文
posted @ 2020-04-16 20:34 ~吹梦到西洲~ 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 该题目首先我想到的算法是bfs,但是bfs的空间复杂度较高,需要额外的队列,在看完题解之后,发现了动态规划这个好办法。具体程序代码如下: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m = matrix.si 阅读全文
posted @ 2020-04-15 16:23 ~吹梦到西洲~ 阅读(2273) 评论(0) 推荐(0) 编辑
摘要: 题目要求:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 今天的题目是一道模拟题,直接对目标情况进行模拟即可,虽然是两层循环嵌套,但是实际时间复杂度为O(n)。代码如下: #include <cstdio> #include <iostream> #include <str 阅读全文
posted @ 2020-04-14 17:19 ~吹梦到西洲~ 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 本题我采用从不同中心不断扩展的方法去进行求解,程序代码如下,在写程序的时候我遇到的一个坑是,由于string的length()函数返回值并非int型数值,因此一开始直接使用min()函数会报错,经过强制类型转换后便可以不报错。时间复杂度为O(n)马拉车算法留作以后再进行学习~~~~~ #includ 阅读全文
posted @ 2020-04-13 21:39 ~吹梦到西洲~ 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 一道很简单的水题,不过没有想到O(1)时间复杂度的方法,代码如下: #include <cstdio> #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; 阅读全文
posted @ 2020-04-10 13:35 ~吹梦到西洲~ 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 看到该题目我首先的想法是采用递推的方式去实现该题目,但是发现会生成重复的元素,因此我采用了dfs剪去不合适的分支的方法来处理该题目。需要剪枝的情况有三种,左括号数目大于n,右括号数目大于n,左括号数目小于 阅读全文
posted @ 2020-04-09 19:53 ~吹梦到西洲~ 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 该题目如果使用时间复杂度为O(m+n)的算法则会非常简单,今天我们在这里介绍一个时间复杂度为O(log(m+n))的算法。 我们这里采用二分法的思想去解决这道题目,首先我们给出的数组是两个有序数组,这样的话,我们可以很方便的将两个数组各自分为两个部分,而我们要寻找的中位数只需要将两个数组合并后的数组 阅读全文
posted @ 2020-04-09 13:35 ~吹梦到西洲~ 阅读(281) 评论(0) 推荐(1) 编辑