Skip to content

Latest commit

 

History

History
42 lines (37 loc) · 1.57 KB

File metadata and controls

42 lines (37 loc) · 1.57 KB

875. Koko Eating Bananas

問題描述

給定一個整數陣列piles,代表有n堆香蕉,piles[i]代表該堆的香蕉數量,守衛h個小時候會回來,請問koko要吃多快才能在守衛回來之前吃完全部。 Example

想法

koko每小時吃的速度最快只需要piles當中最多香蕉的那堆,最慢為1,每次都用middle_speed去計算要花多少時間能吃完全部香蕉,如果大於h,代表這個速度無法在時間h內吃完,因此要加快速度,將最慢的速度設為middle_speed + 1; 如果小於h,代表這個速度能夠在時間h內吃完,因此無須再加快,只須找出最慢可以多慢,將最快的速度設為middle_speed。

程式碼

int hours_need(int *piles, int pilesSize, int speed){
    int hours = 0;
    for(int i = 0; i < pilesSize; i++){
        hours += piles[i] / speed;
        if(piles[i] % speed){
            hours++;
        }
    }

    return hours;
}
int minEatingSpeed(int* piles, int pilesSize, int h) {
    int All_bananas = 0;
    int slowest_speed = 1;
    int fast_speed = 0;

    for(int i = 0; i < pilesSize; i++){
        if(piles[i] > fast_speed) fast_speed = piles[i];
    }
    while(slowest_speed < fast_speed){
        int middle_speed = slowest_speed + (fast_speed - slowest_speed) / 2;
        if(hours_need(piles, pilesSize, middle_speed) > h){
            slowest_speed = middle_speed + 1;
        }
        else{
            fast_speed = middle_speed;
        }
    }

    return slowest_speed;
}