leetcode50题
文章平均质量分 55
@~KevinHong~@
这个作者很懒,什么都没留下…
展开
-
leetcode#124二叉树中的最大路径和*困难
leetcode#124二叉树中的最大路径和*困难题目题解1.1后序遍历1.2复杂度1.3代码题目路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。提示:树中节点数目范围是 [1, 3 * 104]-1000 <= Node.val <= 1000题解1.1后序遍历看到后序遍历,就想到了分解问题进行递归原创 2021-02-01 20:35:05 · 92 阅读 · 0 评论 -
leetcode#236二叉树的最近公共祖先
leetcode#236二叉树的最近公共祖先题目示例注意题解1.递归1.1思路1.2复杂度1.3代码题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例注意说明:所有节点的值都是唯一的。p、q 为不同节点且均存在于给定的二叉树中。题解1.递归1.1思路分解成子问题1.2复杂度时间原创 2021-01-31 17:34:37 · 72 阅读 · 0 评论 -
leetcode#235二叉搜索树的最近公共祖先
leetcode#235二叉搜索树的最近公共祖先题目示例注意题解1.递归1.1思路1.2复杂度题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例注意说明:所有节点的值都是唯一的。p、q原创 2021-01-30 20:19:16 · 75 阅读 · 0 评论 -
leetcode#230二叉搜索数第k小的元素
leetcode#230二叉搜索数第k小的元素题目示例题解一.deep first search1.1思路1.2复杂度1.3代码题目给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。来源:力扣(LeetCode)链接:link示例题解一.deep first search1.1思路这个二叉树是排过序的,root->left,root,root->right值依次增原创 2021-01-29 19:17:50 · 76 阅读 · 0 评论 -
leetcode#28实现strStr()
leetcode#28实现strStr()题目注意示例题解1.1顺序查找思路复杂度代码题目注意示例题解1.1顺序查找思路先找第一个字母,再进行比对。复杂度时间:O(n)空间:O(1)代码class Solution {public: int strStr(string haystack, string needle) { int len1=haystack.length(); int len2=needle.length();原创 2021-01-25 16:54:58 · 80 阅读 · 0 评论 -
leetcode#14最长公共前缀
leetcode#14最长公共前缀题目题解2.1对比删减代码题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。题解2.1对比删减代码class Solution {public: string longestCommonPrefix(vector<string>& strs) { int len=strs.size(); if(len==0) return ""; el原创 2021-01-23 14:39:07 · 80 阅读 · 0 评论 -
leetcode#43. 字符串相乘
leetcode#431.problem2.sulotion2.1先乘再进位复杂度代码实现2.2先乘各个位再求和1.problem给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。2.sulotion2.1先乘再进位复杂度时间:O(m*n)空间O(1)代码实现class Solution {public: string multiply(string num1, string num2) {原创 2021-01-22 21:50:32 · 115 阅读 · 1 评论 -
leetcode#137只出现一次的数字
leetcode#137只出现一次的数字一.题目二.题解2.1进制位运算思路复杂度代码一.题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?来源:力扣(LeetCode)链接:link二.题解2.1进制位运算思路有3个相同的数,它们的二进制表示相同。(内存中,数字以二进制表示)所以各个位要么有3个1要么全为0.对那个只出现一次的数字,它的各个位要么是1要么是0原创 2021-01-21 21:30:52 · 141 阅读 · 0 评论 -
leetcode#136只出现一次的链表
leetcode#136只出现一次的链表一.题目二.题解2.1位运算思路代码一.题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?来源:力扣(LeetCode)链接link二.题解2.1位运算思路a⊕a=0a⊕a=0a⊕a=0a⊕0=aa⊕0=aa⊕0=a代码class Solution {public: int singleNumber(vec原创 2021-01-20 19:36:54 · 83 阅读 · 0 评论 -
leetcode#148排序链表
leetcode#148排序链表一.题目二.思路2.1(错误思路)链表数组2.1.1细节2.1.2 代码实现2.2分治2.2.2递归分治思路复杂度代码2.2.3迭代分治思路复杂度代码实现一.题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-list著作权归领扣网络所有。原创 2021-01-19 21:45:29 · 110 阅读 · 0 评论 -
leetcode#142环形链表II
环形链表II一.题目二.思路:快慢指针三.代码**调试错误:一.题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?来源:力扣(LeetCode)链接:link二.思路:快慢指针2∗(a+b)=a+n∗(b+c)+b2*(a+b)=a+n*(b+c)+b2∗(a+b)=a+n∗(b+c)+b化简a=c+(n−1)∗(b+c)a=c+(n-1)*(b+c)a=c+(n−1)∗(b+c)原创 2021-01-18 21:54:55 · 88 阅读 · 0 评论 -
leetcode#2 两数相加
leetcode#2 两数相加一.题目二.思路2.1链表-》数-》链表2.2进位法一.题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。二.思路2.1链表-》数-》链表usigned long long int都hold不住class Solution {public: unsigned long l原创 2021-01-17 22:22:16 · 70 阅读 · 0 评论 -
leetcode#141环形链表
141. 环形链表一.题目1.1题目描述1.2 示例1.3题目提示二.题解2.1辅助指针数组2.1.1思路2.1.2复杂度分析2.1.2代码实现2.2切断法2.2.1思路2.2.2复杂度分析(两种实现方法)2.3快慢指针2.3.1思路2.3.2复杂度时间:O(n)空间O(1)2.3.3代码一.题目1.1题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置原创 2021-01-16 19:52:00 · 93 阅读 · 0 评论 -
leetcode#21两个有序链表的合并
leetcode#21两个有序链表的合并一.题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2原创 2021-01-15 22:18:44 · 115 阅读 · 0 评论 -
# leetcode#5最长回文数C++
leetcode#5最长回文数思路对每一个字符,检测它与它旁边的数是否为回文数,如果是,那么再扩展它 的长度检查,分奇偶情况讨论,得到以该字符为中心最长的回文数。在遍历过程中用max[2]储存该目前最长的回文数位置和长度。这样算法时间复杂度为O(n^2)。代码实现不甘放弃class Solution {public: string longestPalindrome(string s) { int len=s.size(); if(len==0||len=原创 2021-01-13 22:30:36 · 828 阅读 · 0 评论 -
#(系统错误)#leetcode#5最长回文数
(错误)leetcode#5最长回文数思路对每一个字符,检测它与它旁边的数是否为回文数,如果是,那么再扩展它 的长度检查,分奇偶情况讨论,得到以该字符为中心最长的回文数。在遍历过程中用max[2]储存该目前最长的回文数位置和长度class Solution {public: string longestPalindrome(string s) { int len=s.length(),check(1); int max[2]={0,1}; if(len==1)原创 2021-01-13 22:01:16 · 86 阅读 · 0 评论 -
# leetcode#155最小栈
leetcode#155最小栈一.题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[nu原创 2021-01-12 21:59:09 · 77 阅读 · 0 评论 -
# leetcode#20有效的括号
leetcode#20有效的括号题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路循环字符串,把左边各种括号压入栈。如果遇到右括号,则跟栈顶的符号比较。如果匹配,则栈顶元素出栈,不匹配则返回false示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入:原创 2021-01-11 23:04:04 · 86 阅读 · 0 评论 -
leetcode#9回文数
leetcode#9 回文数题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例输入输出121true输入输出-----------121false输入输出----------10false解释:-121倒序121-不一样。题解可见负数均不为回文数,对于回文数的检测,先取其各个数位,再将头和尾进行比较,奇数位则中间的一个不比较,奇数位和偶数位数字的检验可以通过巧妙设置循环条件用原创 2021-01-10 20:19:25 · 76 阅读 · 0 评论 -
leetcode#7整数反转,用数组解
leetcode#7整数反转用数组解一.题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。1.1注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,231−1] [−2^{31} ,2^{31} − 1][−231,231−1]请根据这个假设,如果反转后整数溢出那么就返回 01.2示例leetcode#7整数反转xoutput123-123-123-3211202100原创 2021-01-09 20:43:06 · 113 阅读 · 0 评论