LCS 01:下载插件

This commit is contained in:
轩辕龙儿 2021-12-24 10:04:52 +08:00
parent 06a2390828
commit face8d7ac7

View File

@ -0,0 +1,46 @@
数学思路:一开始还没有理解题目,后来才理解了,加倍的意思就是那一分钟不加倍,下一分钟的下载量翻倍
所以直接翻倍直到最后下载量超越了要下载的插件,然后化一分钟下载即可,然后我就想了想那肯定是翻倍
然后再下载,谁会一个一个的下载?
*
```
// 解法1直接使用数学方法
class Solution {
public int leastMinutes(int n) {
// 求出翻倍超越插件下载数量所需要的时间
int load =1;
int time=0;
while(load<n){
load=load*2;
time++;
}
return time+1;
}
}
```
解法2这道题既然安排到了动态规划这里哪我也使用动态规划的思路意思一下吧
首先我先大致讲讲动态规划的大致思路:就拿四个下载量来举个例子
下载四个插件的方法有一个一个的下载所以dp[4]=dp[3]+1
翻倍后下载第一天不下载下载量2个 第2天不下载下载量4个 第3天直接下载
也就是下载量为n/2的那天不下载然后花一天下载 dp[4]=dp[2]+1
所以先加倍的方程为零件数目减半所花的时间加上1天 因为/是整除所以下加上1 可以想象3个零件减半所化的时间应该是2个零件而且不是一个 依次类推 dp[i]=d[(i+1)/2]+1;
所以就可以的到动态规划转移方程dp[i]=Math.min(dp[i-1]+1,dp[(i+1)/2]+1)
*
```
class Solution {
public int leastMinutes(int n) {
// 设置一个动态规划数组
int[] dp=new int[n+1];
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=Math.min(dp[i-1]+1,dp[(i+1)/2]+1);
}
return dp[n];
}
}
```