摘要: 要根据链表节点的值是否大于等于x将链表划分为两段,首先需要链表中大于等于x和小于x的节点的个数,所以无法直接在原链表上做修改。 既然要分开大于等于x的值和小于x的值,我们可以考虑开两个链表,这样按顺序扫描原链表的时候,小于x的值接到第一个链表,大于等于x的值接到第二个链表。 然后再把这两个链表连接起 阅读全文
posted @ 2020-07-17 21:39 machine_gun_lin 阅读(83) 评论(0) 推荐(0)
摘要: 这题其实是84题的进阶版。 要求最大矩形,同样也是枚举所有矩形,关键就在于如何枚举。 如果直接枚举所有起点和终点,复杂度最起码是O(n^4),超时。 所以要换种方式枚举,可以考虑固定住所有矩形的底边,比如以每一行作为底边,枚举以这个底边,往上有哪些矩形,分别计算面积。 固定住底边之后,网上所有的连续 阅读全文
posted @ 2020-07-17 11:58 machine_gun_lin 阅读(126) 评论(0) 推荐(0)
摘要: 要求能勾勒出来的矩形的最大高度,很自然的想法就是枚举所有矩形的宽度和高度,再通过高度和宽度的乘积求出所有矩形的面积,这样就可以知道最大矩形的面积了。 暴力做法是,枚举所有矩形的宽度(也就是枚举左边界和右边界),再求出左边界和右边界内柱子的最小高度(瓶颈高度),然后得到矩形的面积。 代码如下: cla 阅读全文
posted @ 2020-07-17 11:01 machine_gun_lin 阅读(158) 评论(0) 推荐(0)
摘要: 原题链接 这道题就是单调栈最经典的应用,单调栈往往就是求一个数组中每个元素左边(之前)的元素中离它最近的比它小的元素。 首先很容易想到暴力做法,对于每一个元素,从当前元素的前一个元素开始往前遍历,第一个满足小于当前元素的元素就是答案,遍历完数组都不存在元素比当前元素小,则输出-1. 代码如下: #i 阅读全文
posted @ 2020-07-16 19:54 machine_gun_lin 阅读(112) 评论(0) 推荐(0)
摘要: 原题链接 数组模拟队列和数组模拟栈其实很类似,都是用一个数组来存储元素,用指针表示当前可以操作的位置。 区别就是栈只能在栈顶进行操作,所以只需要有一个top指针指向栈顶。 而队列可以在队头和队尾都进行操作(出队、入队),所以需要两个指针head和tail指向队头和队尾。 如果有元素入队,则tail加 阅读全文
posted @ 2020-07-16 13:38 machine_gun_lin 阅读(160) 评论(0) 推荐(0)
摘要: 原题链接 题意是用数组模拟一个栈,支持四种栈操作:在栈顶插入元素,弹出栈顶元素,查询栈顶元素,查询栈是否为空。 用数组模拟栈只需要开一个数组存储栈元素,再用一个额外的变量top表示当前栈顶元素下标。 直接看代码吧: #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2020-07-16 13:25 machine_gun_lin 阅读(173) 评论(0) 推荐(0)
摘要: 之前写了数组实现单链表,提到了数组实现链表比指针实现最大的优点就是快,可以随机存取,而且不用new节点。 在图论的题目里用到邻接表,往往都是用数组实现。 数组实现双链表比单链表就多了一些对于左指针的操作。 为了实现的方便,不像在单链表实现里用一个额外的变量head去记录链表的头节点。 而是直接用两个 阅读全文
posted @ 2020-07-16 13:11 machine_gun_lin 阅读(472) 评论(1) 推荐(0)
摘要: 单链表常见的实现方法有两种,一种方式是定义一个结构体表示链表节点。比如: struct node{ int val; node* next; }; 然后就是通过next指针将链表的所有节点连接起来。如果涉及到链表节点的插入和删除操作,则只需要修改链表节点的指针即可。 这种方式有个明显的缺点,就是不能 阅读全文
posted @ 2020-07-15 20:33 machine_gun_lin 阅读(2120) 评论(0) 推荐(1)
摘要: 5177. 转变日期格式 思路:按照空格划分出年月日,年已经是数字形式,不需要做处理。月是英文单词的缩写,需要对应到相应的数字。 对于日,只需要把结尾的英文序数词去掉,只留下数字即可。 这里要注意月和日可能是个位数,这种情况下要在前面补一个0. class Solution { string mon 阅读全文
posted @ 2020-07-13 11:01 machine_gun_lin 阅读(146) 评论(0) 推荐(0)
摘要: 原题链接 来源:剑指offer, Hulu面试题 题意很简单。给定一个单链表,反转这个单链表,返回翻转后的头节点。 方法一 借助栈的性质 要将链表翻转,很容易想到借助栈的后进先出的性质来改变链表的顺序。 将链表节点顺序压入栈中,链表节点全部进栈以后,取栈顶元素作为新链表的头节点,然后将元素不断出栈, 阅读全文
posted @ 2020-07-10 11:09 machine_gun_lin 阅读(126) 评论(0) 推荐(0)