自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 给定链表一个节点,不知道头节点的删除、插入操作

1、给定链表的一个节点,不知道头节点,如何删除该节点?2、给定链表的一个节点,不知道头节点,在该节点的前面插入一个节点

2022-07-18 11:30:41 769 1

原创 力扣 剑指offer 31、栈的压入、弹出序列

关于本题栈的压入、弹出序列,用模拟的方法,用一个辅助栈来模拟入栈的顺序,附思路和详细代码注释

2022-06-01 11:48:14 205

原创 力扣 剑指offer29.顺时针打印矩阵

本文章是用模拟的方法来解决力扣的剑指offer29.顺时针打印矩阵这一题,附有自己手绘的模拟过程图和详细的代码注释。

2022-06-01 10:31:41 220 1

原创 指针、引用与数组,野指针

目录1、指针与引用的区别:2、指针与数组的区别3、指针与数组的联系4、野指针野指针的形成:1、指针与引用的区别:1、指针是一个变量,存储的内容为一个地址;引用是给一个已有的对象起的别名2、指针是一个实体,需要分配内存空间;引用只是变量别名,不需要分配内存空间3、可以有多级指针,不能有多级引用4、自增运算结果不同,指针++是指向下一块空间,引用变量++是变量本身的值++5、指针...

2022-05-27 22:51:04 164

原创 15、三数之和

思路:如果是求两数之和,可以先对数组排序,然后用双指针,从两头开始遍历,那么对于三数之和,我们可以先确定一个数,然后用解决两数之和的办法,用双指针求另外两个数。需要注意的是题目要求答案中不能包括重复的三元组,所以我们在遍历的过程中要去重。算法:因为要求的是三数之和,所以当数组长度小于3时直接返回空数组。定义二维数组res为结果集。然后用sort()方法对数组nums排序,sort()的时间复杂度为nlogn。用for循环来遍历数组元素,因为数组已经排序了,如果nums[i]的值大于0,...

2022-02-27 16:37:31 359

原创 力扣11、盛最多水的容器

思路:我要找到可以容纳最多水的容器,也就是我们从数组中选出两个边和x轴能组成的面积最大的长方形,求其面积,为底乘高。我们从底最大(即数组的第一个元素和最后一个元素作为两边,此时底为最大)开始,定义一个整型变量maxWater用来存放容器可以容纳的水。然后定义两个指针i和j初值分别为0和height.size(),即从数组的两边开始遍历,长方形的高取两个指针指向的数组元素中小的值,底为j-i,更新maxWater的值然后让左右指针向中间移动,比较更新maxWater的值,无论指针i右移还是指针..

2022-02-23 16:55:48 135

原创 力扣647、回文子串

方法:中心拓展思路:对于回文子串的长度是奇数个还是偶数个,其回文中心有所不同,对于长度是奇数的回文子串,它的回文中心是一个字符,而对于长度是偶数的回文子串,其回文中心是两个相同的字符。我们通过中心扩展的思想,就是确定回文中心,然后让子串向两端扩展,直到不能扩展为止。可以根据回文中心是一个字符还是两个字符两种情况分别做循环,找出每个回文子串。res为结果集,left和right分别为回文子串的左边界和右边界,通过while循环由回文中心往两边扩展代码:class Soluti...

2022-02-22 19:37:10 182

原创 力扣34——在排序数组中查找元素的第一个和最后一个位置

详细代码注释

2022-01-20 23:29:14 554

原创 力扣74——搜索二维矩阵

代码附详细注释

2022-01-17 22:35:20 385

原创 力扣441——排列硬币

思路:对于按阶梯排列的硬币,它的行数k与完整排列需要的硬币总数t之间满足等差数列t=k*(K+1)/2我们可以通过二分查找,计算n枚硬币形成的完整阶梯行的行数。代码:class Solution {public: int arrangeCoins(int n) { int l=1,r=n; while(l<=r){ int mid=l+(r-l)/...

2022-01-17 15:39:25 160

原创 力扣33、力扣81——搜索旋转排序数组

思路:首先看到这个题目就有一些不懂他是要干嘛,简单来说就是在一个数组中中是否存在一个元素,存在的话返回该元素的下标,否则返回-1,那么正常来说直接遍历数组即可,但是,肯定不会这么简单,好歹他是一道中等题目,这个数组是一个旋转后的数组,我们要利用他的特点来降低他的时间复杂度,达到O(logn)的复杂度完成查找。将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也可能是部分有序。此时有序部分用二分法查找。无序部分再一分为二,其中一个一定有序,另一个可能有序,可能无序。就这样循环,时间复.

2022-01-17 01:49:47 423 2

原创 力扣3——无重复字符的最长子串

思路:用滑动窗口来解决问题,定义left,和right为窗口的边界,初值均为0,res作为结果集,然后定义一个哈希集辅助,用来存放left到right内出现过的字符,为了后面移动right边界的时候判断该字符是否出现过。然后我们让left从左往右遍历字符串s,在循环内部,如果right在字符串s内并且s[right]字符不在哈希集合中的话就把他放入集合中,并且跟新结果集,right向右移动。right移动结束后,left向左移动的同时删除哈希集合中的s[left]元素。循环结束后,返回res..

2022-01-16 12:44:35 134

原创 力扣剑指offer II 015——字符串中的所有变位词

思路:滑动窗口窗口的大小为字符串p的长度,用两个长度为26的数组S和P(题目中说了s 和 p 仅包含小写字母,所以用大小为26的数组即可),分别来装滑动窗口中的字母和字符串p中的字母,然后比较数组S和P是否相等,然后滑动窗口,更新数组S中的值继续比较S与P数组S和P的作用相当于桶!!!代码:class Solution {public: vector<int> findAnagrams(string s, string p) { int sl=...

2022-01-12 17:33:25 102

原创 2134、最少交换次数来组合所有的1 II

思路:滑动窗口窗口的大小就是数组中1的个数,确定了窗口的大小,定义结果集为res,初始化窗口左右边界从数组开头开始,用sum记录窗口中0的个数,因为第一个元素和最后一个元素相邻,所以我们可以再用一个数组nums拼接到数组后面,来完成环形数组,但在实际写代码中,我们只需要在滑动窗口的过程中让条件为窗口的右边界R<2*nums.size(),然后用nums[L%nums.size()]找到数组中的元素即可在滑动窗口的过程中,如果sum&l...

2022-01-12 16:48:58 415

原创 力扣118——杨辉三角

思路:杨辉三角的特点是每个数是它左上方和右上方的数的和,我们在模拟的过程中,从左往右放元素,它的特点就为每个数是它左上方和上方的数的和,每一行的第一个和最后一个元素为1(除了第一行只有一个元素),即每行第二个元素(i,j)开始,等于前面一行(i-1,j-1)+(i-1,j)的和代码class Solution {public: vector<vector<int>> generate(int numRows) { vecto...

2022-01-12 15:48:32 106

原创 力扣剑指offer 54——二叉搜索树的第k大节点

两种递归解法代码

2022-01-11 20:58:06 76

原创 力扣590——N叉树的后序遍历

递归1class Solution {public: vector<int>res; vector<int> postorder(Node* root) { if(root==nullptr) return {}; for(int i=0;i<root->children.size();i++){ postorder(root->children[i]); } ..

2022-01-11 20:14:27 317

原创 力扣589——N叉树的前序遍历

递归做法:做法与二叉树相似,用一个for循环递归每个childrenclassSolution{public:vector<int>preorder(Node*root){vector<int>vec;pre(root,vec);returnvec;}voidpre(Node*root,vector<int>&vec){...

2022-01-11 20:10:52 298

原创 力扣67、二进制求和

char与int之间的类型转化,解题思路以及源代码

2022-01-11 14:59:10 102

原创 力扣232——用栈实现队列

思路:用两个栈s1和s2,一个作为输入栈,一个作为输出栈,在pop 或peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。代码:class MyQueue {public: stack<int> s1,s2; MyQueue() { } void push(int x) { s1.push(x); } i..

2022-01-10 21:00:20 245

原创 力扣455——分发饼干

解法1:用两个优先级队列思路: 用两个优先级队列,que1和que2分别存储数组g和数组s的元素,用小顶堆的优先级队列,用num来记录满足孩子的数量用while循环当两个队列中都有元素时,用x和y分别记录两个队列的堆顶元素,比较x和y,当x<=y时代表,que2.top()的饼干可以分给que1.top()胃口值的孩子,则该胃口值出队que1.pop(),num++,该尺寸饼干也出队que2.pop();如果不满足x<=y,则该胃口值不出队列,只...

2022-01-10 16:56:34 425

原创 力扣1406——最后一块石头的重量

优先级队列的简单介绍,解题思路以及源码

2022-01-10 14:54:51 194

原创 力扣129——求根结点到叶子结点数字之和

思路:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), ri...

2022-01-09 22:27:24 247

原创 构造函数和析构函数

c++利用构造函数和析构函数实现了对象所占内存的初始化和清空操作。对象的初始化和清除操作时强制执行构造函数和析构函数,如果没有自己实现,编译器提供默认构造函数和析构函数。构造函数作用于对象初始化,主要作用在创建对象时为对象的成员变量赋值,构造函数由编译器自动调用,不需要手动调用,当我们使用new时,会先使用malloc申请一块堆区空间,然后调用构造函数为申请的空间赋值。析构函数作用于对象销毁工作,清空对象所占有的堆区内存注意:c++的一切操作都是在...

2022-01-09 19:58:57 276

原创 力扣111——二叉树的最小深度

思路:采用递归的做法,要求树的深度,用后序遍历的方法递归,从下往上返回深度值。从叶子结点向上返回值,返回当前节点的深度值,向上返回,因为要求二叉树的最小深度值,所以节点的深度值为其左右子节点中的最小值+1,对于叶子结点,没有左右孩子,该节点的深度值可以由root==nullptr 时返回0+1得到;对于,只有一个孩子的节点,该节点的深度值不能直接取其左右子节点中的最小值+1,因为只有一个孩子,所以其孩子返回的深度值最一定为有一个为0,取最小值+1后为1,但对于 3 ...

2022-01-08 21:02:51 95

原创 力扣145——二叉树的后序遍历

递归后序遍历/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nul...

2022-01-08 11:10:16 453

原创 力扣144——二叉树的前序遍历

递归先序遍历/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nul...

2022-01-08 10:50:33 60

原创 力扣94——二叉树的中序遍历

递归中序遍历:/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(n...

2022-01-08 10:32:11 168

原创 力扣135——分发糖果

思路:我们用一个数组res来存储每个孩子获得的糖果数,那么res数组的长度为ratings.size(),因为每个孩子至少分配一个糖果,所以给数组初始化值全为1, 因为相邻两个孩子评分更高的孩子会获得更多的糖果,所以我们可以进行两次遍历,一次从前往后,然后比较该元素与其后一个元素,如果后面的元素大,就给数组res对应的后一个元素res[i+1]=res[i]+1,因为要和后一个元素比较,所以遍历数组ratings遍历到其前一个元素即可;第二次从后往前遍历,比较该元素...

2022-01-08 09:54:24 391

原创 力扣463、岛屿的周长

代码:class Solution {public: int islandPerimeter(vector<vector<int>>& grid) { int x=grid[0].size();//二维网格的列数 int y=grid.size();//二维网格的行数 int res=0;//待返回周长 for(int j=0;j<y;j++){ for(int...

2022-01-02 21:54:25 316

原创 力扣剑指offer32—从上到下打印二叉树

这三个题目大致上都相同,I的做法最简单,II是在I的基础上做了相当于换行的操作,III在II的基础上对偶数行的元素进行了反转剑指offer32-I、从上到下打印二叉树/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x...

2022-01-01 17:13:53 767 1

原创 力扣500——键盘行

思路:用哈希表来存储键盘的所有字母(包括大小写),对第一行字母的值都为1,第二行字母的值都为2,第三行字母的值都为3,然后遍历数组,对数组中的每个单词进行遍历,在哈希表中找到单词的第一个字母,将它对应在哈希表中的值用m记录,然后遍历该单词,比较每个字母在哈希表中对应的值和m是否相等,(用flag记录单词是否完全遍历了)如果不相等就结束当前单词的遍历,flag=1,当一个单词遍历完全遍历完了,则说明该单词满足要求,添加到字符串数组vec中。代码:classSolution{...

2021-12-30 18:08:57 286

原创 力扣409——最长回文串

思路:对于回文串,长度可以是偶数,可以是奇数,如果是偶数,则每个字符出现的次数应该为偶数;如果是奇数,则有一个字符出现的次数可以为奇数,其他字符出现的次数都为偶数用哈希表来存放字符串,哈希表的键对应字符,值对应该字符的数量。用迭代器来遍历哈希表,元素数量为偶数的可以直接加到num中,数量为奇数的-1再加到num中,并且对于数量为奇数的元素,要修改flag的值为1,因为回文串中间可以放一个元素,在最后num中要加上flag代码:...

2021-12-30 16:25:59 317

原创 力扣496—下一个更大元素I

思路:用哈希表哈希表中存放nums2中的元素和对应的下标,创建数组vec用来存放每次查询的结果,作为最后的返回值。遍历数组nums1,在哈希表中找nums1[i],因为nums1是nums2的子集,所以一定能找到。un_map[nums1[i]]代表该元素在nums2中的下标,用j来记录该元素在nums2中的下一个元素下标,j=un_map[nums1[i]]+1;从这开始遍历数组nums2,如果找到nums2[j]>nums1[i]的值,则说明本次查询的答案为nums2[j],找...

2021-12-30 15:23:42 299

原创 力扣——面试题16.15、珠玑妙算

思路: 用哈希表来存储guess中的字符和对应的次数,数组vec(2)用来存储猜中次数和伪猜中次数,total用来存储总猜中次数,即总猜中次数=猜中次数+为猜中次数。遍历字符串guess存入后,再遍历字符串solution,如果guess[i]==solution[i],说明该字符猜中了,vec[0]++,如果un_map[solution[i]]!=0,total++;并且要使哈希表中的un_map[solution[i]]--。最后用总次数减去...

2021-12-29 15:42:37 224

原创 力扣刷题1160——拼写单词

思路:创建两个相同的哈希表,首先遍历字符串chars,哈希表的键存储字符,值存储字符在字符串的个数。然后便来字符串数组,遍历字符串数组中每个单词的字符,如果在哈希表中找到该字符并且该字符的数量不为0,则说明该字母满足条件,可以继续遍历,哈希表中该字母的数量减1(因为每次拼写一个单词时chars中的字母只能用一次);如果没有找到或该字符的数量为0,则说明这个单词不满足条件,结束当前单词的遍历,去遍历下一个单词。定义布尔类型变量flag,用来记录遍历的单词是否满足条件,然后决定要不要加入该单词的..

2021-12-29 11:22:57 213

原创 力扣刷题1——两数之和

题目:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 :输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。来源:力扣(LeetCode)链接:htt...

2021-12-09 22:19:30 70

原创 力扣刷题1290——二进制链表转整数

题目:给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)方法1解题思路:要将一个二进制链表转为十进制,我们知道二进制转十进制时,需要知道二进制数的个数n,然后遍历二进制数,第n位二进制数字a转为十进制为a*2^(n-1),所以我们要先遍历一...

2021-12-08 20:54:53 135

原创 力扣刷题82——删除排序链表中的重复元素

题目:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。返回同样按升序排列的结果链表。示例 :输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]解题思路:给定的链表是排好序的,因此我们只需一次遍历就可以删除重复元素,由于链表头节点有可能被删除,所以我们使用虚拟头节点指向链表头节点。我们用指针cur指向虚...

2021-12-06 21:12:22 222

原创 力扣刷题2——两数相加

题目:给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-...

2021-12-05 16:19:10 141

空空如也

空空如也

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

TA关注的人

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