forked from dylansun/leetcode-cn-scala
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNo1014.scala
51 lines (47 loc) · 1.04 KB
/
No1014.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* Created by lilisun on 3/17/19.
*/
object No1014 {
def shipWithinDays(weights: Array[Int], D: Int): Int = {
var lo = weights.sum / D max weights.max
var hi = weights.sum
var mid = (lo + hi) / 2
var ans = hi
while(lo < hi){
if(can(weights, D, mid)){
ans = ans min mid
hi = mid - 1
mid = (lo + hi) / 2
}
else{
lo = mid + 1
mid = (lo + hi) / 2
}
}
if(can(weights, D, hi)) ans = ans min hi
if(can(weights, D, lo)) ans = ans min lo
println(hi, mid, lo, ans)
ans
}
def can(weights: Array[Int], D: Int, load: Int): Boolean ={
if(weights.max > load) return false
var need = 0
var cur = 0
for(i <- weights.indices){
if(cur + weights(i) <= load){
cur += weights(i)
}else{
cur = weights(i)
need += 1
}
}
println(cur)
need+1 <= D
}
def main(args: Array[String]): Unit = {
val w = Array(1,2,3,1,1)
val D = 4
println(can(w,D, 6))
println(shipWithinDays(w, D))
}
}