leetcode
灿烂的人生
此时的我开始感到不安,oo唔oo!只想更加的充实自己,走向辉煌
展开
-
leetcode之课程表
题目描述你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出: fals原创 2020-06-24 13:37:31 · 360 阅读 · 0 评论 -
leetcode之只出现一次的数字
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题目分析想法比较古板,建立一个哈希表,用map去存数组中每个元素,出现一次的即是答案。(官方给出的异或方法,不看属实想不到。。)class Solution {public: int singleNumbe原创 2020-06-12 22:40:14 · 104 阅读 · 0 评论 -
leetcode之 二叉树展开为链表
题目描述给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树题目分析其实是分为三步:首先将根节点的左子树变成链表其次将根节点的右子树变成链表最后将变成链表的右子树放在变成链表的左子树的最右边/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : va原创 2020-06-09 13:09:04 · 146 阅读 · 0 评论 -
leetcode之从前序与中序遍历序列构造二叉树
题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7题目分析思路描述:给出前序、中序遍历构造二叉树也算是比较经典的一道数据结构题目了。前序是先父节点,然后遍历左右子树;而中序是先遍历左子树然后再父节点,最后右子树;所以 preorder 数组中第一个元素是根节点,右边转载 2020-06-08 22:54:27 · 196 阅读 · 0 评论 -
leetcode之最小覆盖子串(滑动窗口经典题型)
本文参照添加链接描述题目描述给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。题目分析1、我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引左闭右开区间 [left, right) 称为一个「窗口」。原创 2020-05-29 01:58:35 · 141 阅读 · 0 评论 -
leetcode之最小路径和
题目描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。题目分析当矩阵只有一行或一列时,直接相加就是最简路线,当某一个格不是第一行,或第一列的时候,我们应该比较一下这格的上边和左边比较出最小的值,然后加在当前格中。class Solution {public:原创 2020-05-25 20:50:51 · 134 阅读 · 0 评论 -
leetcode之最大子序和
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。题目分析首先想到的就是动态规划,主要就是找出状态方程,假设数组中每个元素用ai表示,求出最大子序和的意思,比较当前元素与之前元素相加之和,取最大即f(i)=max(f(i)+原创 2020-05-23 01:42:30 · 108 阅读 · 0 评论 -
leetcode之接雨水
题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6题目分析我能想到的就是暴力解法,从开始到结尾遍历每一滴雨水,对该求该雨滴左右两边最大的高度,取小的高度,再减去该雨滴的高度就是该雨滴面积。画图表原创 2020-05-18 21:51:38 · 238 阅读 · 0 评论 -
leetcode之最长有效括号
题目描述给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”题目分析当字符串为‘(’dp[i]为0,当s[i]=’)‘时,具体讨论:首先判断前一个字符串匹配是否越界即if(i-1-dp[i-1]>=0),在判断s[i-1]=’(’;例如:当i=3时,s[3]=’)’,s[2]=’(’;dp原创 2020-05-14 22:14:55 · 166 阅读 · 0 评论 -
leetcode之搜索旋转排序数组
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], targ原创 2020-05-14 01:07:34 · 72 阅读 · 0 评论 -
leetcode之下一个排列
**题目描述**实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1题目分析解题思路很简单,直接举例说明:比如6 1 2 4 3 0,它的下一个排列应为 6 1 3 0 2 4可以看出规律:数组从后向前遍历,原创 2020-05-13 16:35:24 · 111 阅读 · 0 评论 -
leetcode之括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]题解:仍然是回溯法的题目,回溯法的题目可以看看这个文章:添加链接描述判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。一般回...原创 2020-05-07 00:40:17 · 234 阅读 · 0 评论 -
leetcode之合并两个链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4题目解析:首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 cur指针,我们需要做的是调整它的 next ...原创 2020-05-06 21:04:11 · 190 阅读 · 0 评论 -
leetcode之删除链表的倒数第N个结点
示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?采取双重遍历肯定是可以解决问题的,但题目要求我们一次遍历解决问题,那我们的思路得发散一下。我们可以设想假设设定了双指针 p 和 q 的话,当 q 指...原创 2020-05-05 16:37:22 · 76 阅读 · 0 评论 -
leetcode之四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[...原创 2020-05-03 16:01:10 · 86 阅读 · 0 评论 -
leetcode之最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。取每个容器中的字符串,把每个字符串的子串进行比较。c...原创 2020-04-30 14:34:50 · 73 阅读 · 0 评论 -
leetcode整数转罗马数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...原创 2020-04-29 17:41:47 · 101 阅读 · 1 评论 -
leetcode7之支付穿转换整数(atoi)
请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余...原创 2020-04-25 18:16:28 · 105 阅读 · 0 评论 -
leetcode之整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。class Sol...原创 2020-04-25 11:24:00 · 82 阅读 · 0 评论 -
leetcode最长回文数
首先想到的就是最笨的方法,暴力搜索,但是好像通过不了,超出时间限制,看了别人的代码,才知道大神真的是太多太多。class Solution {public: string longestPalindrome(string s) { string res="";//存放结果 string temp="";//存放子串 for(int i=0...原创 2020-04-20 20:54:02 · 376 阅读 · 1 评论 -
无重复字符串的最大长度
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke...原创 2020-04-11 23:12:42 · 740 阅读 · 0 评论