- 博客(11)
- 收藏
- 关注
原创 剑指 Offer II 039. 直方图最大矩形面积
题目描述: 给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10 解法: 单调栈 根据木桶效应,在相邻的若干矩形中,能够构成的最大矩形的高取决于这些矩形中最矮的那个。 因此在一片相邻的矩形中,只要找到最矮的,其他矩形的高就可以不用考虑。 因此可以想到(可能想不到)使用单调栈
2022-03-11 21:30:40
333
原创 const、const和指针的关系
const const常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 const和#define的区别: const常量具有类型,编译器可以进行安全检查;宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查。 const默认作用于其左边的东西,否则作用于其右边的东西 const int* const修饰右边的int,常量整型,*修饰int,指向int的指针。加起来含义是:这个指针指向一个int,int由于被const修饰,所以int对应的数字(指针所指向的内容
2022-03-10 20:35:50
288
原创 LeetCode 剑指Offer 005 单词长度的最大乘积
题目描述: 给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。 输入: words = [“abcw”,“baz”,“foo”,“bar”,“fxyz”,“abcdef”] 输出: 16 解释: 这两个单词为 “abcw”, “fxyz”。它们不包含相同字符,且长度的乘积最大。 题目很好理解,问题关键在于如何判断两个单词是否存在交集。 解法:位运
2022-03-10 17:57:08
223
原创 LeetCode224 基本计算器
题目描述 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 给定的字符串表达式由数字、‘+’、‘-’、‘(’、‘)’、‘ ’组成。 比如给定字符串"1 +1", 函数需要返回结果2。 解法:双栈 首先看到这个题应该会想到后缀表达式的计算过程,设置一个nums栈存放数字,遇到运算符就取nums栈顶两个元素计算,然后放回栈中。但是题目给的是一个中缀表达式,计算需要考虑优先级,因此可以增加一个ops栈来存放
2022-03-10 17:43:39
6591
原创 LeetCode 589 N叉树的前序遍历
题目描述 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔。 输入:root = [1,null,3,2,4,null,5,6] 输出:[1,3,5,6,2,4] 题目很好理解,就是简单的二叉树前序遍历换成了N叉树,因此遍历方法也会分为递归和非递归方法。 解法一: 递归 递归解法和二叉树遍历的基本一致,按照中间,从左边到右边的顺序进行遍历,遍历。 代码: class Solution { public:
2022-03-10 10:42:27
205
原创 LeetCode 304 二维区域和检索 - 矩阵不可变 (前缀和)
题目描述 给定一个二维矩阵 matrix,以下类型的多个请求: ●计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。 实现 NumMatrix 类: ●NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化 ●int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子
2022-03-08 22:38:00
945
原创 LeetCode 92 反转链表II
题目描述: 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 和反转链表I相比,只是从全部反转变成只反转left到right部分。 解法: 和反转链表I类似,只是改为中间部分旋转,需要定义好left左侧的指针,然后通过头插法将left右边right-left+1个节点插入即可。 在实现过程中,需要特别注意哑节点的使用,引入哑节点之后对头结点的处理更方便。 比如给的
2022-03-08 22:22:57
207
原创 vit-pytorch库中vision transformer部分的代码阅读
最近实验需要用到vision transformer的一些代码,之前对vit内部具体的代码实现细节还有些模糊,今天重新读了一遍代码并注释。 用的代码是vit-pytorch库中的。 github地址:vit-pytorch github 安装方法: pip install vit-pytorch 代码: class ViT(nn.Module): def __init__(self, *, image_size, patch_size, num_classes, dim, depth, head
2022-03-08 20:50:22
1846
原创 LeetCode2055. 蜡烛之间的盘子
题目描述 给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串 s ,它只包含字符 ‘*’ 和 ‘|’ ,其中 ‘*’ 表示一个 盘子 ,’|’ 表示一支 蜡烛 。 同时给你一个下标从 0 开始的二维整数数组 queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti…righti] (包含左右端点的字符)。对于每个查询,你需要找到 子字符串中 在 两支蜡烛之间 的盘子的 数目 。如果一个盘子在 子字符串中 左边和右边 都 至少有一
2022-03-08 17:26:07
273
原创 Leetcode160 相交链表
相交链表(简单) 题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 解法一: 通过计算两个链表的长度差n,将长的链表从头先移动n个指针,两个指针同时向前,直到相等,此时的指针就是第一个相交的结点。 代码 class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNod
2022-03-07 23:02:58
353
原创 Leetcode 504七进制数
Leetcode第504题: 七进制数 简单题:给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 num范围是 (-10^7, 10^7) 比如给定十进制数100, 转化为7进制就等于202(49+49+1+1). **解法: ** 参考进制转换方法, 除以7取模,直到num小于等于0. class Solution { public: string convertToBase7(int num) { if(num == 0) return "
2022-03-07 22:32:26
225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅