贪心算法 -判断能否满足时间填充
2021/7/30 17:08:24
本文主要是介绍贪心算法 -判断能否满足时间填充,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import java.util.Arrays; /** * @author * Created on 2021-05-01 */ public class GreedyUtils { /** * 贪心算法工具类 * 实现:一个时间轴是否被其他片段时间充满 * 例如: * A:2-20 * B:中有多个片段 2-7,7-15,15-21 是否能够充满A */ public static boolean videoStitching(long[][] clips, long t) { if (t == 0) { return false; } // 按起点升序排列,起点相同的降序排列 Arrays.sort(clips, (a, b) -> { if (a[0] == b[0]) { if (b[1] > a[1]) { return 1; } else if (b[1] == a[1]) { return 0; } else { return -1; } // return (b[1] - a[1]); } if (a[0] > b[0]) { return 1; } else if (a[0] == b[0]) { return 0; } else { return -1; } //return (a[0] - b[0]); }); // 记录选择的时间段个数 //int res = 0; long curEnd = 0, nextEnd = 0; int i = 0, n = clips.length; while (i < n && clips[i][0] <= curEnd) { // 在第 res 个时间点的区间内贪心选择下一个时间范围 while (i < n && clips[i][0] <= curEnd) { nextEnd = Math.max(nextEnd, clips[i][1]); i++; } // 找到下一个时间点,更新 curEnd // res++; curEnd = nextEnd; if (curEnd >= t) { // 已经可以拼出区间 [0, T] return true; } } // 无法连续拼出区间 [0, T] return false; } }
/** * 判断能否满足时间填充 * 备注:通过包的开始时间到结束时间形成一个时间轴,然后计划列表中开始时间到结束时间是否充满整个时间轴 */ public boolean isToUp(List<PlanDo> planDoList, PackDo packDo) { if (CollectionUtils.isEmpty(planDoList) || packDo == null) { return false; } long packEndTime = packDo.getPackEndTime(); long packStartTime = packDo.getPackStartTime(); long[][] r = new long[planDoList.size()][2]; //1.同等去做坐标式平移(同时都减包的开始时间) for (int i = 0; i < planDoList.size(); i++) { r[i][0] = planDoList.get(i).getDeliveryStartTime() - packStartTime; r[i][1] = planDoList.get(i).getDeliveryEndTime() - packStartTime; } //2.贪心算法计算是否填满整个时间轴 return GreedyUtils.videoStitching(r, (packEndTime - packStartTime)); }
这篇关于贪心算法 -判断能否满足时间填充的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门