自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 二叉树中的最大路径和

二叉树中的最大路径和路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和。思路这题老师讲课时讲过,课堂的ppt的上也有(不是照抄ppt的),就是从根结点出发,找出左右孩子的贡献值,为正则就加入到路径和的统计中,为负则将贡献值视为0,并且一直比较路径值的大小,更新最大路径值。代码class Solution {public:

2021-02-01 22:24:20 210

原创 LeetCode二叉搜索树的最近公共祖先

二叉搜索数的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-common

2021-01-30 22:23:50 188

原创 二叉搜索树中第K小的元素

二叉搜索树中第K小的元素给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。思路本来觉得这题挺难,直到晚上吃饭的时候突然发现输入的都是二叉排序树,那这题就太简单了,先用中序遍历二叉树,得到一个数组,然后返回数组中的第k个元素就行了代码class Solution {public: vector<int> a; void inorder(TreeNode* r

2021-01-29 19:33:19 157

原创 二叉树的最大深度

二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nul

2021-01-28 20:16:03 261

原创 LeetCode正则表达式匹配

正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/regular-expression-matching思路用动态规划的方法,关键是要明确状态转移,用dp[i][j]表示s的前i-1个元素与p的前j-1个元素

2021-01-27 22:26:33 171

原创 LeetCode题目 实现 strStr()

实现 strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。思路与代码这题比较简单,用的也是很常规的方法,注意haystack长度小于needle的情况,还有needle为空的情况就可以了class Solution {public: int strStr(string haystack, string needle)

2021-01-25 20:48:22 98

原创 翻转字符串

翻转字符串给定一个字符串,逐个翻转字符串中的每个单词。说明:无空格字符构成一个 单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。思路先把字符串前后的空格删掉,再删掉单词之间多余的空格,然后把每个单词倒转,最后把整个字符串倒转代码class Solution {public: void reverse(string& s,int l,int r){ int a;

2021-01-24 21:01:59 147

原创 最长公共前缀

最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。代码class Solution {public: string longestCommonPrefix(vector<string>& strs) { int len=strs.size(); if(len==0){ return ""; } int min=strs[0].size(

2021-01-23 19:14:43 91

原创 字符串相乘

字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。代码与思路模拟乘法竖式计算的方法,找到竖式计算第二步相加时的的数位关系,利用这种数位关系相加来建立表示结果的数组,最后

2021-01-22 22:28:21 278

原创 只出现一次的数字2

只出现一次的数字2给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。思路1.这道题是中等难度的题里面比较简单的,居然用暴力方法可以通过,暴力解法就是对每个数组中的数字都和数组中的每个数字进行比较,相等时将初值为0的n加1,内层循环每次结束时,若是出现三次的数字则n=3,若只出现一次则n=1,这是用break结束外层循环,返回当前数字就行,这个方法是从头开始遍历数组,找每个数组数字的出现次数,返回出现次数为一的那个数,如果这个数藏在一个巨大数组的最后

2021-01-21 21:40:26 113

原创 只出现一次的数字

只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。思路我以前见过这原题,看了解答以后知道了异或运算,两数相同结果为0,任何数与0异或得本身,这道题教会我异或运算,对本题印象深刻代码class Solution {public: int singleNumber(vector<int>& nums) { int m=0;int n=0; for(int i=0;i<

2021-01-20 20:36:55 102

原创 排序链表

排序链表给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表思路刚开始用冒泡排序写的,但这个排序方法时间复杂度为O(n^2),leetcode上最后三个输入样例会超时,要用其他排序方法代码冒泡排序class Solution {public: ListNode* sortList(ListNode* head) { int m=0;int len=1; ListNode* h=head; if(head==NULL){

2021-01-19 20:17:36 103

原创 两数相加

两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路先检索两个链表长度,如果不相等就用0将较短的一个向较长的一个补齐,补完以后将两个链表各位相加,同时定义一个进位符n,如果和大于9则n为1,否则为0,各位相加时加上n代码class Solution {public: ListNode* addTw

2021-01-18 21:11:46 109

原创 环形链表2

环形链表2给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。思路以之前的判断链表有无环为基础,用快慢指针判断,无环返回null,有环即快慢指针相遇时,让第二个慢指针从head出发,快指针速度是慢指针的二倍,入环点是A,相遇点距离入环点是

2021-01-18 20:25:11 206

原创 环形链表

环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。思路快慢指针法,两个指针遍历,一个速度慢,一个速度快,若快指针遇到NULL则说明无环,若快指针遇到慢指针

2021-01-16 19:32:48 137

原创 合并两个有序链表

合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。代码class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* l3=new ListNode(); ListNode* l=l3; if(l1==NULL){ return l2;

2021-01-15 21:44:11 79

原创 最长回文子串

最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”思路用一个二元组p[i][j]表示字符串s中从下标为i的字母到下标为j的字母确定的子串是否为回文,若是则p[i][j]=1,否则为0,建立好这样一个二元组后,遍历二元组,返回j-i最大且对应

2021-01-14 21:07:42 325

原创 最小栈

最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。求最小元素的时间复杂度应为O(1),这要求我们在该函数里直接返回一个值代码class MinStack {public: stack <int>s; stack <int>m; MinStack()

2021-01-12 21:56:14 71

原创 C++有效的括号

C++有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意:空字符串可被认为是有效字符串。思路由于要对照字符串对称位置上的括号是否对应,决定采用栈来解决这一问题,若字符串长度不为偶数则直接返回false,遍历字符串,读到前括号时入栈,读到后括号时若栈空则返回false,若栈不空则用栈顶元素与其比较,能对应则出栈,不能则返回false。最后检查栈空,若空则返回t

2021-01-11 21:38:15 1259

原创 C++回文数算法实现

C++回文数算法实现判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数实例示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。思路在之前写过的整数转置的基础上进行修改,先判断正负,如果是负数则直接返回false,为正就将该整数

2021-01-10 12:02:15 4026

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除