pdd笔试20190728

这篇博客分享了PDD笔试中涉及的四道算法题,包括几乎严格升序问题、首尾相连字符串的回溯解法、多任务执行顺序的贪心策略和搭积木的动态规划方法。通过详细解析,帮助读者理解解题思路和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

拼多多的笔试题对我来讲比较难,参考牛客大佬的题解,自己开始预习题目中涉及的知识点吧

作者:Sss201903111816437
链接:https://www.nowcoder.com/discuss/212692
来源:牛客网

One:几乎严格升序

2.回溯

Two:首尾相连的一组字符串(回溯)

Three: 多任务的执行顺序(贪心+拓扑)

题目:现在一共有N个待执行的任务,每个任务需要Pi的时间完成执行。同时任务之间可能会有一些依赖关系,比如任务1可能依赖任务2和任务3,那么任务1必须等任务2和任务3执行完成后才能开始执行。为了最小化任务的平均返回时长,请安排所有任务的执行顺序。假设在零时刻,所有N个任务已到达系统。

思路:贪心(每次先将不依赖其他任务的任务按从小到大的顺序执行) 借助优先队列(堆)BFS

  • 构建图 map<顶点,依赖的顶点>,同时更新每个顶点的入度(该顶点依赖其他的顶点的个数,比如执行任务5,需要先执行任务1,2,3,则任务5的入度为3),不依赖其他顶点的顶点的度为0

  • BFS,入度为0的顶点先进堆,依次弹出的同时,更新依赖该顶点的所有顶点的入度(该顶点不在图中了,被依赖的顶点的度-1),更新后符合入度=0的顶点入堆

public class Main3 {
   
   
	/**
	 * 题目:一共有N个待执行的任务,每个任务需要Pi时间,任务之间有依赖,求完成任务的平均时间最短 思路:拓扑排序 +
	 * 贪心(每次先将不依赖其他任务的任务按从小到大的顺序执行) 借助优先队列(堆)BFS 1.构建图 map<顶点,依赖的顶点>
	 * 同时更新每个顶点的入度(该顶点依赖其他的顶点的个数,比如执行任务5,需要先执行任务1,2,3,则任务5的入度为3),不依赖其他顶点的顶点的度为0
	 * 2.BFS,入度为0的顶点先进堆,依次弹出的同时,更新依赖该顶点的所有顶点的入度(该顶点不在图中了,被依赖的顶点的度-1),更新后符合入度=0的顶点入堆
	 */
	static class Task {
   
   
		int seq;
		int time;

		public Task(int seq, int time) {
   
   
			this.seq = seq;
			this.time = time;
		}
	}

	public static void main(String[] args) {
   
   
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		Task[] tasks = new Task[n + 1];
		for (int i = 1; i <= n; i++) {
   
   
			tasks[i] = new Task(i, in.nextInt());
		}
		// 1.构建图
		HashMap<Integer, List<Integer>> graph = new HashMap<>();
		int[] degree = new int[n + 1];
		for (int i = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值