京东8.2笔试 Java卷 算法题分享/求解答
题1:给n个任务。 a[i] 代表完成任务需要时间 和 b[i]表示每等待 1 分钟就需要多花b[i]时间
例子:
2
1 1
2 5
最短时间:先完成 任务2,用时 2min,再完成任务1,用时(1 + 1*2) = 3分钟,总用时间5min
解法,使用PriorityQueue排序即可
PriorityQueue<int[]> pq = new PriorityQueue<>( (a, b) ->{
return a[0]*b[1] - b[0]*a[1];//其实就是给每个任务排序一下,贪心地排序,让等待时间影响最小的最后完成
} )
题2:从(0,0)出发,只能往上、左、右走,要求一条路径中不能有重复坐标。求n步能走出的方案数。n最大到1e9。对1e9+7取模。
个人想法:手动画图推导一下可以得出当n = 2, 3, 4时答案是7,15,31。盲猜一手2^(n+1) - 1。
写了个快速幂,喜提18%准确率。
#笔试##京东#