关于小米笔试
第二个算法题,有n个应用,每个应用有耗电量和最小要求电量,求最小持电量导致可以满足所有应用耗电量之和,若最小持电量大于电池容量则输出-1。求大佬指点迷津!![](https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553985503/8879C4447814928B4C020BF66AC2E924)
全部评论
我是用a[1]降序-a[0]升序做的,考虑了4800,但是还是只过了83,不知道为啥
一次遍历,算出 所有最小要求电量-耗电量的最小值a,算出所有耗电量之和b,最高要求电量c,取a+b和c中最大的那个,就是答案,如果答案大于4800,就输出-1,这是我a的做法
只过了66
贪就完事了
下限的上限是最大要求电量,上限是最大要求点量+所有耗电量的和。然后循环判断
用总耗电量之和加上单个任务执行后的最小电量,判断是否超过最大电量就OC了。感觉有问题,但是过了
卧槽,前面的是耗电量啊,我以为是序号呢![](https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43)
![](https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43)
我是排序,先按最小电量升序排,再按耗电量降序排,之后贪心。结果过了50%,没考虑超出容量的-1情况。
0.17,直接输出-1就有😂😂😂
相同耗电量下,优先跑要求电量高的;
相同要求电量下,优先跑耗电量低的;
不同耗电、不同要求电量下(如下👇),无法简单比较决定排序(排序做的不能AC的原因);
15:17、14:15 结果30 29-32
1:15、5:16 结果17 6-31
【为了解决这种情况】
进行简单推理:两个(a:b),(c:d),此时a!=c ;b!=d;
设电量为n (n>= max(b,d));
① 当n-a>=d 时,可以通过
所以 n_min = max(a+d, b);
当我们交换顺序 n_min = max(c+b,d);
所以为了让n最小化,我们排序的逻辑此时为:
max(a+d, b) < max(c+b, d) ? 【这么排(a,b)→(c,d)】 :【否则这样排(c,d)→(a,b)】;
【收尾】
排序策略写好了,我们在定义一个自定义排序函数即可,调用sort;
从头到尾贪婪计算电量即可;
我是贪心,把除了消耗最大的一个任务外的任务消耗电量累加得到sum,然后从消耗最大任务中取初始电量最小的电量得到min,然后sum+min 返回,并排除大于4800的电量,最后通过率83%
或者,使用电量求和得到a,然后和剩余电量最大值进行比较,得到他俩的最大值b。然后b+1,就是最后的输出值。如果a>4800的话,输出值为-1
动态规划做的,dp是第n个应用最小持电量,但是只过了50%![](https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763930/8B36D115CE5468E380708713273FEF43)
相关推荐
![](https://static.nowcoder.com/fe/file/oss/icon_job.png)
点赞 评论 收藏
分享
![](https://static.nowcoder.com/fe/file/oss/1716965564844UEBJN.png)
![](https://static.nowcoder.com/fe/file/oss/1716965585666UBBME.png)
腾讯
| 实习
| 超多精选岗位
点赞 评论 收藏
分享