自定义博客皮肤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 296

原创 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 257

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

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

2021-01-29 19:33:19 205

原创 二叉树的最大深度

二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 代码 /** * 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 355

原创 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 215

原创 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 141

原创 翻转字符串

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

2021-01-24 21:01:59 191

原创 最长公共前缀

最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 代码 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 137

原创 字符串相乘

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

2021-01-22 22:28:21 362

原创 只出现一次的数字2

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

2021-01-21 21:40:26 151

原创 只出现一次的数字

只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 思路 我以前见过这原题,看了解答以后知道了异或运算,两数相同结果为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 156

原创 排序链表

排序链表 给你链表的头结点 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 149

原创 两数相加

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

2021-01-18 21:11:46 152

原创 环形链表2

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

2021-01-18 20:25:11 239

原创 环形链表

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

2021-01-16 19:32:48 176

原创 合并两个有序链表

合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 代码 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 117

原创 最长回文子串

最长回文子串 给你一个字符串 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 390

原创 最小栈

最小栈 设计一个支持 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 113

原创 C++有效的括号

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

2021-01-11 21:38:15 1370

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

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

2021-01-10 12:02:15 4367

空空如也

空空如也

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

TA关注的人

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