自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【LeetCode2】-两数相加

实现思路一、遍历两个链表,使用一个sum来记录进位的情况新节点tt->val=(l1->val+l2->val+sum)%10新计算的sum(l1->val+l2->val+sum)/10二、当同时遍历完之后,有一个链表不为空时,将该链表和进位进行运算依次得到新节点三、在之前两步操作之后判断进位是否为1,如果为1,新创建一个节点值为1添加到新链表的最后实现代码/** * Definition for singly-linked list. * struct

2021-01-24 17:07:57 51

原创 【LeetCode23】-合并K个升序链表

方法一(暴力求解)实现思路依次合并两个相连的链表时间复杂度方法二(利用STL)实现思路实现代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *

2021-01-24 16:30:27 67

原创 【LeetCode21】合并两个有序链表

实现思路:遍历两个链表,新设置两个变量保存新链表的头部和尾部,当谁的数值更小,就加谁添加到新链表的后面,如果这样遍历后还有链表不为空,就直接把剩余的部分拼接到新链表上,注意考虑边界问题实现代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * Li

2021-01-24 14:54:17 41

原创 【LeetCode138】-复制带随机指针

实现思路深拷贝的时候,连接下一节点这一操作的是简单的,难点在于,怎么确定新创建节点和原节点一一对应的关系进而去连接random可以使用map操作,将原节点的地址映射到新创建节点的地址上。另一种是将原节点映射到一个序号,利用vector现成序号的特性,在vector中再存储新节点的地址实现代码/*// Definition for a Node.class Node {public: int val; Node* next; Node* random;

2021-01-24 10:23:49 72

原创 【LeetCode86】-分隔链表

方法一实现代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), n

2021-01-23 19:40:56 40

原创 【LeetCode141/142】-环形链表

方法一:实现思路遍历链表,同时将遍历的元素添加到集合中,判断集合中是否出现过该元素,如果出现过,则说明链表中有环存在。实现代码141代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:

2021-01-22 21:55:01 69

原创 【LeetCode160】-相交链表

方法一:实现思路分别遍历两个链表,将链表的节点指针压入栈中,然后依次比对两个栈的栈顶元素,相同则将该节点保存在变量t中,并弹栈,直到栈为空或者栈顶元素不相同时,停止对栈的操作,返回变量t的值为结果实现代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}

2021-01-22 21:12:24 99

原创 【LeetCode92】-反转链表II

实现思想可以有将m和n之间的链表利用LeetCode206反转链表的思想进行反转,不同的在于反转后最后一位指向的为n+1节点,当处理完的这一小段返回的时候,令m-1处节点指向刚刚处理的那段的头部,在实现的过程中注意处理边界,如m等于1和n为最后一个元素等问题实现代码:提示:这里描述项目中遇到的问题:例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据APP 中接收数据代码:class Solution {public: ListNode * reverse(ListNode

2021-01-21 15:08:51 74

原创 【LeetCode206】-反转链表

实现思路使用三个节点指针维护进行逆序转化,属于链表基本操作,可以理解为基本不多开辟空间基本流程如图所示在实现的过程中,记得考虑特殊位置第一个元素及最后一个元素,同时要考虑特殊空链表的情况实现代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} *

2021-01-21 13:40:27 73

原创 【LeetCode1】-两数之和

方法一(暴力解法:双指针):实现思路先固定第一个数,然后在该数的后面一次遍历,直到两数之和相加等于目标值,返回下标实现代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int n=nums.size(); vector<int>re; for(int i=0;i<n-1;i++){

2021-01-21 09:32:39 45

原创 【LeetCode53】-最大子序和

方法一(DP)实现思路关键在于找到状态转移方程实现代码#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public: int maxSubArray(vector<int>& nums) { if (nums.size() == 0) return 0; vector<int>

2021-01-20 20:35:57 42

原创 【LeetCode341】-扁平化嵌套列表迭代器

实现思路:利用递归的特性,如果返回的还是列表就遍历,直到返回的是一个整数,就将该整数压入到队列中,在实现next和hasNext操作的过程中,next操作直接返回队首并弹出,hasNext直接利用队列的特性,判断队列是否为空即可实现代码:#include <iostream>#include <queue>#include <vector>using namespace std; // This is the interface that allows

2021-01-20 14:26:07 50

原创 【LeetCode394】-字符串解码

方法一(栈)实现思路:由于这道题也是在右方括号出现之后,才能确定这一小段序列,符合栈后进先出的特性,所以维护两个栈,一个栈维护子字符串重复的次数,另一个栈维护子字符串这道题本身不难,但不要忘记一些小的点,如判断如判断栈中元素是否为空,注意数字可能不止一位有多位的情况实现代码:注意拼接字符串的使用,字符串和字符串的拼接直接使用+即可,在字符串后面要添加字符时使用push_back()#include <iostream>#include <stack>#include

2021-01-20 09:03:10 58

原创 【LeetCode316】-去除重复字母

方法一:实现思路一次遍历字符串,直到遍历完字符串之后才能获得结果,也就是符合后进先出的规律,所以在实现的过程中会使用到栈这一数据结构。要注意题中要求返回最小字典序的字符串,且字符串的顺序不能发生改变。栈中存储最后的结果,栈压入和弹出的规则:1.如果栈中没有元素直接压入2.栈顶元素被弹出的规则为,栈顶元素大于当前元素,且栈顶元素在后面还会出现3.当前元素已经被压入栈中,则不将该元素压入栈中具体的例子,如下图所示在代码实现的过程中,我多设计了一个数组book用来标识元素是否压入了下标,用数

2021-01-15 15:15:36 55

原创 【LeetCode173】-二叉搜索树迭代器

实现思想:不难发现想要遍历next的数据,就是对应二叉树的中根遍历,那么可以把树的中根遍历的顺序存储在队列中,next操作为取队首并弹出,hasNext就是判断队列不为空即可实现代码:#include <iostream>#include <queue>using namespace std;struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(n

2021-01-14 21:11:50 63

原创 【LeetCode739】-每日温度

实现思想:借助了【LeetCode84】-柱状图中最大矩形面积的思想,因为该计算也是满足后进先出的规律,所以选择用栈来实现,栈里面存储的是元素的下标值,只要当前的温度大于栈顶的元素,就计算两个下标值的差值,将该计算值作为栈顶元素下标对应的结果,同时将栈顶元素弹出,新的下标值压入栈中。这么处理完之后栈中还剩余的元素一律将计算值赋为0实现代码:#include <iostream>#include <stack>#include <vector>using nam

2021-01-14 20:40:34 61 1

原创 【LeetCode85】-最大矩形

实现思路:这道题实现的思路是建立在 【LeetCode84】-柱状图中最大矩形面积基础之上实现的。实现代码:提示:这里描述项目中遇到的问题:例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据APP 中接收数据代码:@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes,

2021-01-13 19:12:53 79

原创 【LeetCode84】-柱状图中最大矩形面积

方法一(暴力解法):基本思路计算矩形的面积无非就是底乘以高,但是固定底来依次计算高是不容易的,因为可以用来的底部的面积从左到右有很多中可能,所以可以尝试固定给出的几种高度值,来计算可行的底部信息。实现代码#include <iostream>#include <vector>using namespace std;class Solution {public: int largestRectangleArea(vector<int>& he

2021-01-13 15:09:10 200

原创 【LeetCode20】-有效的括号

实现思路:使用栈进行实现,非常的简单,就是满足匹配了就弹栈,不满足就压栈,最后判断栈是否为空,为空说明是有效的括号实现代码:#include <iostream>#include <stack>using namespace std;class Solution {public: bool isValid(string s) { stack<char> st; for (int i = 0;i < s.length();i++) { i

2021-01-09 15:53:06 52 2

原创 【LeetCode42】-接雨水

实现思路:最原先的思路是数组下标0123456数组数据3101212设置了三种状态:flag 为0代表初始计算状态(并不一定指第一个元素)flag为1代表下降状态flag为2代表上升状态从图和给出的表格看出,1)height[0]为初始计算状态2)从height[0]到height[2]为下降状态3)height[2]到height[4]为上升状态可以看出从height[4]到height[5]又为下降状态,那么height[4]

2021-01-09 15:29:44 115

原创 【LeetCode295】-数据流的中位数

实现思路:维护了一个k大小的最小堆minq,该最小堆里面存储的实际上前k最大的数据,k=n/2+1,由于k的数值是在变换了,往里新添加的数据有可能新来的元素,也可能是之前未添加进去的元素,所以我还维护了一个最大堆otherq,里面放置的是未添加到minq的数据当前minq堆中元素<k时otherq中没有元素时,将新来的元素直接压入minq中otherq中有元素的情况下,谁大谁就保存在minq中,否则就保存在otherq中当前minq堆中元素 ≥ k时和minq栈顶元素比,谁大谁就保存在

2021-01-06 12:05:58 165

原创 【LeetCode215】- 第K大数

堆相关知识:堆可以分为最大堆(最小堆),两者取最大(最小)时间复杂度为O(1),插入新的元素或删除元素,调整的时间复杂度均为O(log(n))这里面要注意最大堆(最小堆)的左右子树仍为最大堆(最小堆)堆的库使用:堆在C++中实现该数据结构的实际就是优先队列优先队列#include < queue>实现一简要说一下思想就是,将所有数据压入优先级队列中,要第k大的元素,就先把之前k-1个元素弹出,取栈顶就是要的第k大的元素#include <iostream>

2021-01-05 20:47:23 129

原创 【LeetCode224】-简单计算器

题目大意输入一系列的字符串,进行模拟计算器的计算,只不过这个计算器比较简单只涉及到加减和括号的运算,在里面还会有空格干扰之前做过类似的题目要带上乘除运算(不过程序被我不小心删掉了)实现思路:使用的数据结构栈:数据栈操作符栈状态转换借鉴别人的思想系统的说,在这个过程中会有两种状态的转换#mermaid-svg-KBJ62qPcHW2IcHLc .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--merma

2021-01-05 15:48:50 151

原创 【Poj1363】-判断合法栈序列

题目大意:给定一个数字序列判断该序列是否可以按照栈的规则得到链接: poj1363.解决思路一(超时):经发现,如果是三个数的情况下,不合法的顺序只有312,也就是一个数最大第二个数最小的情况下,出栈序列是不合法的,原先我是只比较相连的三个序列,经老师提醒应该是全局的三个数进行比较。解决思路一的代码:#include <iostream>#include <cstdio>#include <stack>using namespace std;cons

2021-01-05 11:19:10 634

原创 【LeetCode155】-最小栈

实现思路:这道题需满足O(1)时间内返回栈中最小元素。设置两个栈,一个栈保存数据,另一个保存最小数据栈当新压入的元素≤min栈的栈顶元素,该元素也会被压入min栈当弹出元素和min栈的栈顶元素相同时,min栈也要弹出元素解释为什么新压入的元素=min栈的栈顶元素也要压入min栈这是弹出元素的情况下,当前栈中最小元素为2,2的位置有多个不仅是在栈顶,当数据栈弹出2之后,栈的最小元素还是2。如果新压入的元素=min栈的栈顶元素没有被压入,那么min栈的元素不包含2,当放回最小栈元素时就不是2出

2021-01-04 14:34:02 50

原创 【LeetCode232】-用栈的数据结构实现队列的功能

实现思路:声明栈数组stack s[2]int类型变量cur,记录当前所使用的栈为哪儿一个其余操作可以直接调用栈的操作即可,重点要实现的为push操作 这种方式的实现是完全按照队列的特性,将数据倒置存储在栈中,这样就可以按照栈的操作思路取出数据的顺序为队列中的数据实现代码:#include <stack>#include <iostream>using namespace std;class MyQueue {public: /** Initial

2021-01-04 13:47:29 64

原创 【LeetCode225】-用队列数据结构实现栈的功能

LeetCode225用队列数据结构实现栈功能基础知识队列queue的操作:功能函数返回值取队首front()int取队尾back()int弹队首pop()void判断是否为空emptybool第一种实现思路这种思路是我自己的一个想法成员变量的设置队列数组大小为2int类型的cur变量标识现在使用的是哪儿个队列int类型的n变量标识现在有多少个数据难点在于怎么实现pop()实现pop时,将现在使用的队列的元素,除了队尾

2021-01-03 20:38:13 70

空空如也

空空如也

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

TA关注的人

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