向上取整的方法
对一个数进行向上取整,对于cpp
来说,可以使用库函数ceil
进行取整。对于非负数来说,可以使用下面的方法进行方便的取整。公式如下:
(a + b - 1) / b
证明思路如下图所示:
对一个数进行向上取整,对于cpp
来说,可以使用库函数ceil
进行取整。对于非负数来说,可以使用下面的方法进行方便的取整。公式如下:
(a + b - 1) / b
证明思路如下图所示:
where
字符串终止
或者嵌套条件终止
就返回where
,目的是让上级函数通过where
知道解析到了什么位置,进而继续给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
字符串中一共会出现四种情况:1.数字 2.字母 3.左括号 4.右括号
遇到数字和字母,我们可以记录下来。遇到左括号,说明我们进入到了一个嵌套,需要重复括号内的字符串,直到i扫描到右括号。
这个时候,上游的函数就可以接收下游函数传递的嵌套结果,进而通过数字进行重复。
代码如下:
1 | int where = 0; |
本文整理自左神的算法讲解039【必备】嵌套类问题的递归解题套路
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
使用两个栈,一个栈用于存储数据,一个栈用于存储当前的最小值,分别记作a, b。当push的val大于b中的栈顶元素时,就再次向b压入栈顶元素,否则压入val。
1 | class MinStack { |
indegree
数组,用于记录各个节点的入度情况。以入度为0的节点作为拓扑排序的起点。visited
过,则visited[cur] = true
。如果存在重复visited
,则说明成环。1 | #include <iostream> |
O(E+V)