Leetcode 周赛#202 题解
本周的周赛题目质量不是很高,因此只给出最后两题题解(懒)。
1552 两球之间的磁力 #二分答案
题目链接
题意
有n个空篮子,第i个篮子位置为position[i],现希望将m个球放到这些空篮子,使得任意两球间最小磁力最大。(其中,磁力简化为两点位置之差)
分析
该题是二分答案的裸题,详细见代码
class Solution {
public:
bool Judge(vector<int>& a, int x, int m){
int cnt = 1,lastpos = a[0];
for (int i = 1; i < (int)a.size(); i++){
if(a[i] - lastpos >= x){ //两点间距是否大于答案x
cnt++;
lastpos = a[i];
}
if(cnt == m) return true;
}
return false;
}
int maxDistance(vector<int>& position, int m) { //该二分算法,是考虑[1, n+1)
sort(position.begin(), position.end()); //记得先排序!!!
int lo = 0x3f3f3f3f;
int hi = position[position.size() - 1] - position[0] + 1; //确定两个篮子最大间距,为二分的上界,注意要+1!!!
for (int i = 1; i < (int)position.size(); i++){
int delt = position[i] - position[i - 1]; //确定两个篮子的最小间距,为二分的下界
lo = min(delt, lo);
}
while(lo < hi){
int mid = (lo + hi) >> 1;
if(Judge(position, mid, m)) //估计答案
lo = mid + 1; //答案可以再高一些
else
hi = mid; //说明该答案下的间距无法将所有球放完
}
return lo-1;
}
};
1553 吃掉N个橘子的最少天数 #记忆化搜索
题目链接
题意
给定n(<= 2e9)个橘子,每一天你只能从以下三种方案中选择一种:
- 吃掉一个橘子
- 若剩余橘子数
n能被2整除,那么你可以吃掉n/2个橘子 - 若剩余橘子数
n能被3整除,那么你可以吃掉2*(n/3)个橘子
现要求吃掉这n个橘子的最少天数。
分析
容易知道,当n>3时,吃掉n/2个橘子,剩余橘子数即为n/2;吃掉2*(n/3)个橘子,剩余橘子树即为n/3。
那我们先预处理,将n$\leq$3的情况记录下来。接下来考虑转移方程。
起初我考虑有三个转移方向:n-1,n/2,n/3,并用数组记忆化。在如此庞大的数据范围,不但数组无法承受,而且会分出更多的子问题。
为了应对空间问题,可以考虑用map来记忆化。
为了应对时间问题,我们分析到,对于当前剩余橘子数n,
- 方案二分析:\(n\ Mod\ 3 = 0, 1, 2\),余数为0,显然吃掉n/3个橘子即可;余数为1时,说明我们需要用n/3天的时间将3的倍数个橘子吃完,最后剩下一个橘子,需要1天;同理,余数为2时,说明我们用n/3天将3的倍数个橘子吃完后,还需要用两天时间(使用方案一)将剩下2个橘子吃完。
- 方案三如方案二分析同理,我们要用n/2将2的倍数个橘子吃完后,还需要\(n\ Mod\ 2\)天(使用方案一,且已经预处理过)吃掉剩余的橘子。
因此,我们只需要交给程序去考虑当前的n是选择方案二更优还是方案三,自顶而下向下递归。无需再考虑n-1的方向,同时无需考虑当前的n是否被3整除/被2整除。转移方程见下方代码。
class Solution {
private:
unordered_map<int, int> dp;
public:
int minDays(int n) {
if(n == 1) return dp[1] = 1;
else if(n == 2) return dp[2] = 2;
else if(n == 3) return dp[3] = 2;
else if(dp.count(n)) return dp[n];
else return dp[n] = min(minDays(n / 3) + 1 + n % 3,
minDays(n / 2) + 1 + n % 2);
}
};
在笔记本最后几点电量写完题解qaq
Leetcode 周赛#202 题解的更多相关文章
- LeetCode周赛#204 题解
1566. 重复至少 K 次且长度为 M 的模式 #模拟 题目链接 题意 给定正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式. 模式 是由一个或多个值组成的子数组(连续的 ...
- LeetCode周赛#203 题解
1561. 你可以获得的最大硬币数目 #贪心 题目链接 题意 有 3n 堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币: 每一轮中,你将会选出 任意 3 堆硬币(不一定连续). Alice 将会 ...
- Leetcode 周赛#201 题解
1545 找出第N个二进制字符串的第K位 #分治 题目链接 题意 给定正整数\(n(\leq 20)\)与\(k\),二进制串\(S_n\)形成规则有: \(S_1 = "0"\) ...
- Leetcode 周赛#200 题解
1535 找出数组游戏的赢家 #模拟+优化 题目链接 题意 给你一个由 不同 整数组成的整数数组 arr 和一个整数 k(\(1\leq k\leq1e9\)) .每回合游戏都在数组的arr[0] 和 ...
- LeetCode双周赛#33 题解
5480. 可以到达所有点的最少点数目 #贪心 题目链接 题意 给定有向无环图,编号从0到n-1,一个边集数组edges(表示从某个顶点到另一顶点的有向边),现要找到最小的顶点集合,使得从这些点出发, ...
- Leetcode 双周赛#32 题解
1540 K次操作转变字符串 #计数 题目链接 题意 给定两字符串\(s\)和\(t\),要求你在\(k\)次操作以内将字符串\(s\)转变为\(t\),其中第\(i\)次操作时,可选择如下操作: 选 ...
- 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)
Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...
- 【Leetcode周赛】从contest-41开始。(一般是10个contest写一篇文章)
Contest 41 ()(题号) Contest 42 ()(题号) Contest 43 ()(题号) Contest 44 (2018年12月6日,周四上午)(题号653—656) 链接:htt ...
- 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)
Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...
随机推荐
- SPI、I2C、I2S、UART、GPIO、SDIO、CAN、JTAG的区别及使用方法。
SPI 全称及由来:SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的. ...
- templatedcodegenerator 简单模板化代码生成器
传送门:https://github.com/uniqss/templatedcodegenerator templatedcodegenerator code generator with spec ...
- Sublime Text:性感无比的代码编辑器安装破解配置教程
代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...
- java安全编码指南之:序列化Serialization
目录 简介 序列化简介 注意serialVersionUID writeObject和readObject readResolve和writeReplace 不要序列化内部类 如果类中有自定义变量,那 ...
- 4G DTU模块带有MQTT协议吗?
DTU作为一种通讯设备,其应用场合十分广泛.从广义上讲,在进行通信时,传输数据链路两端负责发送数据信息的模块单元都称之为DTU,在它的作用下对所传信息格式转换和数据整理校验.在狭义上的定义,DTU一般 ...
- FastCGI协议分析
不知道什么时候,就开始有了让HomeServer支持PHP的念头.于是分析起了FastCGI协议.FastCGI用于WebServer与WebApplication之间的通讯,例如Apache与PHP ...
- NOIP 2018 D1 解题报告(Day_1)
总分 205分 T1 100分 T2 95分 T3 10分 T1: 题目描述 春春是一名道路工程师,负责铺设一条长度为 nn 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 ...
- 公钥、私钥、SSL/TLS、会话密钥、DES
一,公钥私钥 1,公钥和私钥成对出现 2,公开的密钥叫公钥,只有自己知道的叫私钥 3,用公钥加密的数据只有对应的私钥可以解密 4,用私钥加密的数据只有对应的公钥可以解密 5,如果可以用公钥解密,则必然 ...
- POJ 2432
\(\mathbf{POJ\;2432}\)题解 题意 给出圆上的\(N\)个点,每个点有一个经度(大于\(0\)小于\(360\)):再给出\(M\)条双向边,保证边\(x y\)仅会沿圆上较短的弧 ...
- Odoo环境搭建之问题readme
环境及工具 Windows,PyCharm Community Edition,postgresql-13.0-1 启动odoo环境 python odoo-bin 如果你只是还是空壳,启动odoo之 ...