自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C和C++的一些区别

C和C++的一些区别总结

2022-08-02 23:18:57 318 1

原创 ‘module‘ object is not callable错误

'module' object is not callable错误修改

2022-07-06 16:00:56 11349

原创 Leetcode-106:根据中后序遍历序列构造二叉树

解题思路1.题目描述2.题目分析和解答2.1 递归2.1.1递归思路2.1.2递归代码(O(N),O(N))2.1.3递归代码2(O(N),O(N))2.2迭代1.题目描述给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorde

2022-05-29 13:27:49 356

原创 Leetcode-112:路径总和

112. 路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点是指没有子节点的节点。这道题和题257. 二叉树的所有路径十分类似,代码也相似。深度优先(O(N),O(N))在本题使用深度优先的话可以使用前序递归来模拟实现,但是在递归中需要处理的是每个节点的路径和的计算要确保不对其它的节点路径和计算造成影

2022-05-27 16:03:43 250

原创 Leetcode-513:找树的左下角值

513. 找树左下角的值题目描述:给定一个二叉树的根节点root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。需要把握的是题中的最左边的意思,因为是最左边,所以按照题目要求我们求的节点不一定就是左叶子节点,也有可能是最深层的一个右叶子,下面是几个例子及其结果根据上面的图示我们可以很容易的知道求解目标就是树的最深层的最左边节点的值。对于此类的求解问题一般有两个方向:深度优先和广度优先,一般来说对于涉及层次的问题求解来说,广度优先具有更加清晰的逻辑。下面我们分两个角度来分析

2022-05-25 15:20:14 188

原创 Leetcode-404:左叶子之和

404. 左叶子之和题目描述:给定二叉树的根节点 root ,返回所有左叶子之和。深度优先(O(N),O(N))class Solution {public: void getLeftNum(TreeNode* root, int &n){ // 根节点为空或者只有一个节点则返回 if(!root->left && !root->right || root == nullptr ) return; //

2022-05-24 15:54:07 82

原创 Leetcode-100:相同的树

100. 相同的树题目描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。深度优先递归解决(O(min(m,n)),O(min(m,n)))class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if(p == nullptr && q==nullptr) return true;

2022-05-24 14:28:52 146

原创 C++的左值右值及其引用

文章目录左值和右值左值引用和右值引用C++中,表达式的值要么是左值,要么是右值。左值右值是相对于表达式而言的。左值和右值首先对于左值和右值的区分并不是简单的取决于表达式是在等号的左边或者右边。我们可以根据左值持久,右值短暂来区分。也就是说,如果一个表达式结束后其值依旧存在,那么它就是一个左值,否则就是一个右值。所以一般来说右值要么是临时对象,要么就是字面值常量。我们也可以采用是否可以取地址的方式来判断表达式的值是一个左值还是右值。因为左值是持久的,所以其一般是可以取地址的,而右值则不可以。一般在表

2022-05-23 22:13:49 279

原创 Leetcode-257:二叉树的所有路径

257. 二叉树的所有路径题目描述:// 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。// 叶子节点 是指没有子节点的节点。1.基于先序遍历的解决对于这道题很容易就可以看出来是个遍历问题的衍生,而且根据题目要求是输出路径,所以我们可以联想到使用先序遍历(根左右的顺序来进行路径打印)。需要处理的是每个节点的路径的保存要确保不对其它的节点路径造成影响,所以使用递归的话在其回溯过程会需要处理那些多余的叶节点。如在上述图示中,红色箭头表示深度向下打印path

2022-05-21 15:50:38 224

原创 Leetcode-110:判定平衡二叉树

剑指 Offer 55 - II. 平衡二叉树题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。题目来源:力扣(LeetCode)链接:https://leetcode.cn/problems/balanced-binary-tree首先需要明确的一点是平衡二叉树的定义:树里面每个节点的左右子树的高度差不大于1碰到这道题我们大多数情况下首先想到的必然是从递归入手。那么对于这个问题如何递归呢

2022-05-14 16:01:36 260

原创 求树的深度:最小深度和最大深度

解题思路1.题目描述1.1 二叉树的最大深度1.2 n叉树的最大深度1.2 二叉树的最小深度2.题目分析与解答2.1 二叉树的最大深度2.1.1 深度优先思想2.1.2 广度优先思想2.2 n叉树的最大深度2.2.1 深度优先——递归2.2.2广度优先——层次遍历2.3 二叉树的最小深度2.3.1 深度优先——递归2.3.2 广度优先——层次遍历1.题目描述1.1 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点

2022-05-10 16:29:17 2125 1

原创 Leetcode刷题-101:对称二叉树

解题思路1.题目描述2.题目分析2.1 递归分析2.1.1 递归形式2.1.2 递归边界条件2.1.2 当前递归执行逻辑2.2 迭代分析3.题目解答3.1 递归解法3.2 迭代1.题目描述给你一个二叉树的根节点 root , 检查它是否轴对称。示例1:输入:root = [1,2,2,3,4,4,3]输出:true示例2:输入:root = [1,2,2,null,3,null,3]输出:false来源:力扣(LeetCode)链接:https://leetcode-cn.co

2022-05-08 15:49:40 418

原创 Leetcode刷题-589&&590:遍历n叉树

解题思路1.题目描述1.1 前序遍历-5891.2 后序遍历5902.题目分析3.题目解答1.题目描述1.1 前序遍历-589示例1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[1,2,3,6,7,11,14,4,8,1

2022-05-07 15:07:28 458

原创 一题问鼎coding之——翻转二叉树

解题思路1.题目描述2.题目分析2.1 递归思路2.2 基于前序遍历的迭代2.3 基于层次遍历的迭代3.题目解答3.1 递归3.2 迭代法实现3.3 层次遍历迭代(滑稽)据说会做这道题就可以直接超越大佬Max Howell(Homebrew的作者),可以自行了解。还等什么,冲起来!1.题目描述给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root = [2

2022-05-06 16:29:32 586

原创 关联容器知识点通关

关联容器1.关联容器与顺序容器的区分2.关联容器的基本操作1.关联容器与顺序容器的区分顺序容器,顾名思义就是其存储时是按照“顺序”来进行存储的,以我们常用的vector和string为例,其每个元素都是按照编号来进行存储的,而且我们在顺序容器上的操作一般也是基于这些位置(编号)的遍历来实现的。与顺序容器不同的是,关联容器的设计原因就是为了实现“高效按值访问”,所以关联容器的数据存储核心一般都是“关键字”。关联二字的应有之义就是关键字和值建立关联关系。另外,对于顺序容器而言,其底层存储结构是数组或者链表

2022-05-02 20:37:05 425

原创 二叉树的遍历总结

二叉树的遍历1.前序遍历1.1 递归前序1.2 利用栈模拟递归2.3 迭代3.后序遍历3.1 递归3.2 迭代3.3 直接迭代保存二叉树节点结构如下 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nul

2022-05-02 14:43:14 1037

原创 Leetcode刷题-347:前 K 个高频元素

解题思路1.题目描述2.题目分析2.1 使用优先队列3.题目解答3.1 使用优先队列1.题目描述给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例2:输入: nums = [1], k = 1输出: [1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/top-k-freq

2022-04-30 17:09:01 600

原创 Leetcode刷题-239:滑动窗口最大值

解题思路1.题目描述2.题目分析3.题目解答1.题目描述给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]示例2:输入:nums = [1], k = 1输出:[1]来源:力扣(LeetCode)链接:https://leetcode

2022-04-28 17:19:35 582

原创 Leetcode刷题-150:逆波兰表达式求值

解题思路1.题目描述2.题目分析2.1 后缀表达式2.2 后缀表达式求值3.题目解答3.1 使用条件判断选择运算符3.2 利用switch的解法1.题目描述根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入:tokens = [“2”,“1”,“+”,“3”,“*”]输出:9

2022-04-27 16:06:39 198

原创 Leetcode刷题-704:二分查找

解题思路1.题目描述2.题目分析3.题目解答3.1 左闭右闭区间3.2 左闭右开区间1.题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5,9,12], target =

2022-04-26 15:09:52 205

原创 Leetcode刷题-20:有效的括号

解题思路1.题目描述2.题目分析3.题目解答1.题目描述给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例1:输入:s = “()”输出:true示例2:输入:s = “(]”输出:false示例3:输入:s = “([)]”输出:false示例4:输入:s = “{[]}”输出:true来源:力扣(LeetCode)

2022-04-24 16:06:04 560

原创 栈和队列相互实现

1.用栈实现队列题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-queue-using-stacks题目要求:实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek()返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false将一个栈当作输入栈,用于压入数据;另一个

2022-04-24 15:34:55 1332

原创 Leetcode刷题-459:重复的子字符串

解题思路1.题目描述2.题目分析2.1 暴力枚举2.2 KMP算法解题2.3 使用库函数3.题目解答3.1 穷举法3.2 利用KMP算法解题3.3 库函数1.题目描述给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例1输入: s = “abab”输出: true解释: 可由子串 “ab” 重复两次构成。示例2:输入: s = “aba”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems

2022-04-23 17:18:33 1682

原创 Leetcode刷题-28:实现 strStr()

解题思路1.题目描述2.题目分析3.题目解答3.1 调用库方法3.2 暴力解法3.3 kmp算法1.题目描述2.题目分析3.题目解答3.1 调用库方法class Solution {public: int strStr(string haystack, string needle) { return haystack.find(needle); }};3.2 暴力解法class Solution {public: int strStr(strin

2022-04-22 16:58:43 299

原创 Leetcode刷题-151:颠倒字符串中的单词

解题思路1.题目描述2.题目分析2.1 整体思路描述2.2 实施2.2.1 去除不规则空格2.2.2 字符串的局部倒置3.题目解答3.1 使用erase进行空格去重复3.2 使用快慢指针进行空格去重复1.题目描述给你一个字符串 s ,颠倒字符串中单词的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅

2022-04-18 18:16:50 721

原创 Leetcode刷题-541:反转字符串II

解题思路1.题目描述2.题目分析3.题目解答1.题目描述给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例1:输入:s = “abcdefg”, k = 2输出:“bacdfeg”示例2:输入:s = “abcd”, k = 2输出:“bacd”示例3:输入:s =

2022-04-17 13:42:55 1069

原创 Leetcode刷题-344:反转字符串

解题思路1.题目描述2.题目分析3.题目解答双方向单方向1.题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例1:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]来源:力扣(L

2022-04-17 13:04:27 827

原创 Leetcode刷题-18:四数之和

解题思路1.题目描述2.题目分析3.题目解答题目代码1.题目描述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] +nums[d] == target你可以按 任意

2022-04-16 15:27:41 565

原创 Leetcode刷题-454:四数相加 II

解题思路1.题目描述2.题目分析3.题目解答哈希集合解法1.题目描述给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n;nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0示例1:输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]

2022-04-15 15:30:09 553

原创 Leetcode刷题-1:两数之和

解题思路1.题目描述2.题目分析2.1 穷举法2.2 哈希集合3.题目解答3.1 穷举3.2 哈希映射1.题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + num

2022-04-15 13:59:43 78

原创 顺序容器小探:增删改查so easy

增删改查也要小心点1.介绍2.添加元素2.1 一般的增加元素2.2 forward_list的增加元素3.元素的访问4.元素的删除4.1 普通的删除元素4.2 forward_list的删除元素1.介绍在前面一篇文章中提到过,对于C++来说,一个容器就是一些特定类型对象的集合,顺序容器为我们提供了控制同一类元素的存储和访问顺序的能力。这种顺序与元素加入容器时的位置相对应。下面表1对C++中顺序容器的类型进行一个总结。表1 顺序容器类型概述类型底层数据结构使用规则vector可

2022-04-14 22:30:50 224

原创 Leetcode刷题-202:快乐数

解题思路1.题目描述2.题目分析2.1 哈希集合解法2.2 双指针解法3.题目解答3.1 使用哈希集合存储平方和3.2 快慢指针1.题目描述编写一个算法来判断一个数 n 是不是快乐数。快乐数的定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false示例1:输入:n = 19输出:tr

2022-04-14 16:03:19 258

原创 Leetcode刷题-349:两个数组的交集

解题思路1.题目描述2.题目分析2.1 通过哈希集合解题2.2 排序+双指针3.题目解答3.1 哈希集合解法3.2 排序+双指针解法1.题目描述给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9]

2022-04-13 10:57:23 336

原创 顺序容器基本操作:熟悉迭代器

顺序容器属性和操作总结1.顺序容器简介2.不同顺序容器的迭代器使用异同3.不同顺序容器的库函数使用异同1.顺序容器简介表1 顺序容器类型概述类型类型说明使用规则vector可变大小数组支持2.不同顺序容器的迭代器使用异同所有的顺序容器都可以使用迭代器Iterator,但是在具体使用上有一些小细节现需要把握,有些容器是不支持部分运算符或者运算的。相比于vector和deque等容器,list的迭代器不支持<运算,只支持递增、递减、==以及!=运算,这是因为其它的顺

2022-04-12 21:24:47 636

原创 Leetcode刷题-242:有效的字母异位词

解题思路1.题目描述2.题目分析2.1 哈希集合解法2.2 字符串排序解法3.题目解答1.题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例1:输入: s = “anagram”, t = “nagaram”输出: true示例2:输入: s = “rat”, t = “car”输出: false来源:力扣(LeetCode)链接:https://leet

2022-04-12 10:11:51 112

原创 Leetcode刷题-142: 环形链表 II

解题思路1.题目描述2.题目分析2.1 哈希集合辅助法2.2 快慢指针2.2.1 快慢指针的工作3.题目解答3.1 哈希集合辅助求解3.2 快慢指针1.题目描述给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos

2022-04-10 11:36:37 337

原创 C++中的基本IO流

IO流1.基本IO流1.1 IO对象无拷贝无赋值1.2 IO对象的条件状态1.3 IO与缓冲2.文件IO流2.1 使用ifstream读取文件内容2.1 使用ofstream输出文件内容3.stringIO类在C++中时不直接处理输入输出的,我们使用的是标准IO库来处理IO,这些库支持从文件、控制台窗口等读写数据,当然在C++中还有一些特殊的类型允许内存IO。比如我们就可以通过string进行读写数据。下面我们先给出基本IO类的库类型和标准头文件表1 基本IO库头文件类型iost

2022-04-09 22:26:23 843

原创 Leetcode刷题-面试题 02.07. 链表相交

解题思路1.题目描述2.题目分析2.1 位置对齐判断2.2 哈希表解决2.3奇妙的双指针解法3.题目解答3.1 对其位置然后遍历判断3.2 哈希集合解法3.3 双指针法——增长版对齐个人学习过程的小总结,如有纰漏,欢迎指正!1.题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:示例1:输入:intersectVal = 8, listA = [4,1,8,4,5],

2022-04-09 11:00:15 905

原创 Leetcode刷题-24:两两交换链表中的节点

解题思路1.题目描述2.题目分析2.1 迭代法解题2.2 递归解法3.题目解答3.1 迭代3.2 递归1.题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例2:输入:head = [1]输出:[1]示例3:输入:head = []输出:[]2.题目分析2.1 迭代法解题这道题就是一个普通的链表节点交换问题

2022-04-07 10:57:11 622

原创 C++中的类初探

C++中的类类的三大特性1.关于类的基本概念1.1基本思想1.2成员1.3类的基本特性1.3.1 访问控制与封装1.3.2 友元函数类的成员类的三大特性封装:安全性继承多态1.关于类的基本概念1.1基本思想类的基本思想是数据抽象和封装,抽象一种依赖于接口和实现分离的技术,类的接口包括用户所能执行的操作。封装是指类隐藏其内部实现细节。也就是说用户只能访问接口。1.2成员成员变量:数据抽象部分成员函数:功能实现在C++程序的编译过程中,首先是进行成员变量的声明的编译,然后才是成员函数体

2022-04-06 21:56:19 854

空空如也

空空如也

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

TA关注的人

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