03 2021 档案

摘要:dp,直接递推和记忆化搜索 记忆化搜索 leetcode 1553 吃掉N个橘子的最少天数 思路:除2或除3总比减一划算,所以先减掉余数再除。由于N很大,需要记忆化搜索;由于N很大,不能用数组,可以用unordered_map class Solution { public: // vector<i 阅读全文
posted @ 2021-03-25 19:17 Rogn 阅读(59) 评论(0) 推荐(0) 编辑
摘要:作用:Trie是一种用于元素范围较小(如0/1,26个字母),常用于字符串前缀、异或值相关的 原理:前缀树,每个节点有固定的sigma个节点,同一层是元素们的同一pos。 实现: 非动态开点: leetcode 1707. 与数组中元素的最大异或值 思路:先排序,再只把小于等于limit的加入,再求 阅读全文
posted @ 2021-03-24 13:17 Rogn 阅读(105) 评论(0) 推荐(0) 编辑
摘要:第三题:1802. 有界数组中指定下标处的最大值 思路:最值,二分法,check。分类左右两侧与x的大小关系 class Solution { public: bool judge(int x, int n, int index, int maxSum) { long long sum = 0; i 阅读全文
posted @ 2021-03-23 16:32 Rogn 阅读(96) 评论(0) 推荐(0) 编辑
摘要:第三题:leetcode 1792. 最大平均通过率 思路:按 detal定义排序规则,一个一个加 class Solution { public: double maxAverageRatio(vector<vector<int>>& classes, int extraStudents) { a 阅读全文
posted @ 2021-03-22 18:48 Rogn 阅读(52) 评论(0) 推荐(0) 编辑
摘要:第三题:1798. 你能构造出连续值的最大数目 思路:就是找到最小的不能被表示的整数 贪心,如果$[0, sum_{i}]$ 都能被表示出来,若$a_{i+1} > sum_{i}$,则$sum_i + 1$就不能被表示;若$a_{i+1} <= Sum_{i}$,则 $[0, Sum_{i+1}] 阅读全文
posted @ 2021-03-22 16:15 Rogn 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原理: 线段树比树状数组要灵活许多,只要能满足“区间加法”的题,都能用线段树来做。但是对于没有修改的情况,区间和可以用树状数组,Max/Min可以用ST表。 线段树的本质是做区间分解,各个子区间的Sum/Max/Min合成大区间的,例如【2,12】=【2】+【3,4】+【5,7】+【8,10】+【1 阅读全文
posted @ 2021-03-16 20:37 Rogn 阅读(117) 评论(0) 推荐(0) 编辑
摘要:题意:就是查询区间内的绝对众数(保证次数超过一半) 解法一:随机+二分 对于一个查询[left, right, threshold],从arr[left...right]中随机取一个,它有一个预处理好的”出现点“数组,求出[left, right]包含的“出现点”的个数,再与threshold比较。 阅读全文
posted @ 2021-03-15 12:27 Rogn 阅读(346) 评论(0) 推荐(0) 编辑
摘要:树状数组的作用很简单,单点修改+区间求和。 单点修改的话有两种,改变多少(add, sub)和改成多少(set),不过后者可以转化为前者,模板一般也是按照前者写的。 原理的话,这里不细节讲,网上很多; 求和: 11的二进制:1011,分成长度分别为1, 2, 8的段累加,每减一次lowbit(x), 阅读全文
posted @ 2021-03-14 15:30 Rogn 阅读(104) 评论(0) 推荐(0) 编辑