LCS 01:下载插件
This commit is contained in:
parent
06a2390828
commit
face8d7ac7
@ -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];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user