LeetCode周赛#225

2021-01-26 做题

传送门 T1替换隐藏数字得到的最晚时间 思路 签到题,注意一些细节就行。 代码 ```cpp class Solution { public: string maximumTime(string time) { if (time[0] == '?' && time[1] >= '4' && time[1] != '?') time[0] = '1'; else if (time[0] == '?') time[0] = '2'; if (time[1] == '?' && time[0] == '2') …

阅读全文 →

LeetCode周赛#220

2020-12-21 做题

传送门 T1重新格式化电话号码 思路 周赛经典的字符串处理题。难倒是不难,但是处理起来感觉比往期的签到题麻烦不少啊... 主要思路就是replace掉'-'与空格,然后每三个一组分片,塞进列表,最后再对单出来的元素特殊处理。 代码 ```python class Solution: def reformatNumber(self, number: str) -> str: number = number.replace('-', '').replace(' ', '') ans, N = [], len(number) for i in range(0, N, 3): ans.append(number[i:i+3]) if len(ans[-1]) == 1: last = ans.pop() sec_last = ans.pop() ans.append(sec_last[:2]) …

阅读全文 →

C++手动实现二叉堆

2020-06-29 做题

二叉堆简介 二叉堆是一种特殊的数据结构,它是一颗具有独特优势的二叉树。 简单地说,二叉堆即是一颗父节点与左右子节点间具有严格大小关系的二叉树。其中父节点大于左右子节点的堆被称为最大堆,反之为最小堆。 二叉堆的操作 插入 二叉堆中新元素的插入位置总是最后一个叶子节点所在位置。通过将新节点上浮至合法位置来维持二叉堆的特性。 删除 与插入相对应,二叉堆总是删除当前的根节点,也就是它的堆顶。删掉当前堆顶后,将最后一个叶子节点放在堆顶并下沉至合法位置,以此来维护二叉堆的特性。 构建 二叉堆的构建是从最后一个叶子节点开始,依次通过执行上浮与下沉操作将每一个节点都归位到合法位置的过程。 二叉堆的存储 不同于传统二叉树,二叉堆的存储采用顺序存储,即数组。在不存在左右儿子指针的情况下,假设父节点为parent,那么它的左右儿子分别为2*parent+1与2*parent+2。 ```cpp #include #define get(x) scanf("%d", &x;) #define lget(x) scanf("%lld", &x;) #define set(a,b) memset(a, b, sizeof(a)) #define rep(a, b, c) for (int a = b; a <= c; a++) using namespace std; const int INF = 0X7F7F7F7F; //上浮叶节点 …

阅读全文 →