算法二刷
_大太阳_
有梦想就去追
展开
-
LeetCode——最长公共子序列
题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。...原创 2020-05-04 19:49:10 · 438 阅读 · 1 评论 -
LeetCode——电话号码的字母组合
题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].题解:深度优先搜索def DFS(idx, lst, tmp, res): if id...原创 2020-05-04 19:16:30 · 167 阅读 · 0 评论 -
LeetCode——最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).题解:1,与上一题思路相似2,双指针法c...原创 2020-04-30 16:39:17 · 202 阅读 · 0 评论 -
LeetCode——三数之和
题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]题解:1,排序2,双...原创 2020-04-24 10:09:35 · 233 阅读 · 0 评论 -
LeetCode——罗马数字转整数
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的...原创 2020-04-24 09:08:41 · 185 阅读 · 0 评论 -
LeetCode—— 整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...原创 2020-04-23 09:44:53 · 191 阅读 · 0 评论 -
LeetCode——盛最多水的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色...原创 2020-04-22 10:53:25 · 185 阅读 · 0 评论 -
LeetCode——正则表达式匹配
题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”...原创 2020-04-18 20:09:09 · 223 阅读 · 0 评论 -
LeetCode——字符串转换整数(int)
题目描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会...原创 2020-04-17 08:47:11 · 398 阅读 · 0 评论 -
LeetCode——Z字形变换
题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换...原创 2020-04-16 09:45:51 · 162 阅读 · 0 评论 -
LeetCode——柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10题解:1,找到i左边第一个小于height...原创 2020-04-01 14:13:37 · 225 阅读 · 0 评论 -
字节跳动——2018校招算法方向
题目描述:P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。输入描述:第一行输入点集的个数 N, 接下来 ...原创 2020-04-01 10:35:05 · 235 阅读 · 0 评论 -
LeetCode——最长回文子串
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”题解:1,manacher算法2,由于回文分为偶回文(比如 bccb)和奇回文(比如 bcacb),而在处理奇偶问题上会比较繁琐,所以这里我们使...原创 2020-03-31 16:00:23 · 204 阅读 · 0 评论 -
LeetCode——寻找两个有序数组的中位数
题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (...原创 2020-03-30 09:45:35 · 245 阅读 · 0 评论 -
LeetCode——无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “...原创 2020-03-25 10:56:24 · 83 阅读 · 0 评论 -
LeetCode——两数相加
题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...原创 2020-03-25 10:26:29 · 84 阅读 · 0 评论 -
LeetCode——两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]题解:1,...原创 2020-03-25 09:47:14 · 96 阅读 · 0 评论 -
LeetCode——按摩师
题目描述:一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出...原创 2020-03-24 13:53:05 · 235 阅读 · 0 评论 -
牛客——剪绳子
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。题解:1,动态规划2,特殊情况 f(2)=1, f(3)=23,f(n) = ma...原创 2020-03-24 10:27:45 · 155 阅读 · 0 评论 -
牛客——机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?题解:1,深度优先搜索2,四个方向3,...原创 2020-03-23 20:02:07 · 147 阅读 · 0 评论 -
牛客——矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入...原创 2020-03-23 16:54:30 · 162 阅读 · 0 评论 -
牛客——滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2020-03-21 11:30:19 · 217 阅读 · 0 评论 -
牛客——数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。题解:1,声明一个vector数组2,在insert函数中每次往vector数组中push_back一...原创 2020-03-21 10:31:01 · 150 阅读 · 0 评论 -
牛客——二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。题解:中序遍历,考虑k<=0和k大于结点总数的情况class Solution { int cnt = 0; TreeNode * knode = NULL;public: void DFS(TreeNode* pRoo...原创 2020-03-19 11:01:43 · 144 阅读 · 0 评论 -
牛客——把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行题解:该题可参考上一篇博文,删除奇偶行判断,换成两个队列即可class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> ...原创 2020-03-19 09:55:30 · 168 阅读 · 0 评论 -
牛客——按之字型顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。题解:1,奇数行从左到右,偶数行从右到左2,打印顺序为A CB DEFG KJIH LM3,定义一个栈,保存当前层结点3,定义一个队列,对于栈顶指针,偶数行保存左右子结点,奇数行保存右左子结点class Solution {...原创 2020-03-18 12:20:55 · 148 阅读 · 0 评论 -
牛客——对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。题解:1,如果根节点为空,则一定是对称的2,如下图所示,满足对称二叉树,相同颜色的为镜像class Solution {public: bool isequal(TreeNode* leftRoot, TreeNode* rightRoot) { ...原创 2020-03-17 13:08:36 · 192 阅读 · 0 评论 -
牛客——二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题解:中序遍历是左中右分两种情况:①pNode的右子树为空,则向上回溯,直到找到该结点的左子结点与当前结点是同一结点,则该结点即为pNode的下一个结点②pNode的右子树不为空,则向下遍历,找到pNode的右结点的左叶子结点class Sol...原创 2020-03-17 11:27:42 · 147 阅读 · 0 评论 -
牛客——删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->51,申请一个新的链表保存删除重复结点后的链表2,注意是将所有重复的结点全部删除3,定义一个p指针指向原链表,一个指针newp指向新链表,并且将newp->ne...原创 2020-03-16 18:15:11 · 146 阅读 · 0 评论 -
牛客——链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。1,设一个快指针fast每次走两个节点和一个慢指针slow每次走一个节点,如果链表中存在环,则快指针和满指针一定会相遇2,设头节点距环入口的距离为a,环入口距快慢指针相遇节点的距离为b,快慢指针相遇节点距环入口的距离为c3,当快慢指针第一次相遇是,慢指针走的距离为a+b,则快指针走的距离为2(a+b),快指...原创 2020-03-16 17:02:06 · 227 阅读 · 0 评论