1. 程式人生 > >乘坐公交(貪心演算法)----去哪兒2016研發工程師程式設計題

乘坐公交(貪心演算法)----去哪兒2016研發工程師程式設計題

[程式設計題] 乘坐公交

從小明家所在公交站出發有n路公交到公司,現給出每路公交的停站數(不包括起點和終點),及每次停的時間(一路車在每個站停的時間相同)和發車的間隔,先假定每輛車同時在相對時間0分開始發車,且所有車在相鄰兩個站之間的耗時相同,都為5分鐘。給定小明起床的相對時間(相對0的分鐘數),請計算他最早到達公司的相對時間。

給定每路車的停站數stops,停站時間period,發車間隔interval及公交路數n,出發時間s。請返回最早到達時間。保證公交路數小於等於500,停站數小於等於50。


小明到達公司的時間由三部分組成:起床時間,等車時間,車的行駛時間 起床時間是固定的s。 等車時間取決於起床時間s與發車間隔interval。如果s%interval為0,則等車時間是0;否則等車時間是(interval-s%interval)。
車的行駛時間,包括停車時間與行駛時間,即 (停站數+1)*5分鐘+停站數*停車時間。 取等車時間+行駛時間的最小值即可,返回時記得加上起床時間。
class TakeBuses {
public:
    int chooseLine(vector<int> stops, vector<int> period, vector<int> interval, int n, int s) {
        // write code here
        int result = 100000 ;
        for ( int i = 0; i < n; ++ i ) {
            int cost_time = s % interval[i] ;
            int wait_time = cost_time == 0 ? 0 : interval[i] - cost_time ;
            result = min( result, wait_time + ( stops[i] + 1 ) * 5 + period[i] * stops[i] ) ;
        }
        
        return result + s ;
    }
};

第二次做:

class TakeBuses {
public:
    int chooseLine(vector<int> stops, vector<int> period, vector<int> interval, int n, int s) {
        // write code here
        int result = 1000000 ;
        for ( int i = 0; i < n; ++ i ) {
            int cost_time = s % interval[i] ;
            int wait_time = cost_time == 0 ? 0 : interval[i] - cost_time ;
            result = min( result, wait_time + ( stops[i] * period[i] ) + ( stops[i] + 1 ) * 5 ) ;
        }
        return result + s ;
    }
};


第三次做:

class TakeBuses {
public:
    int chooseLine(vector<int> stops, vector<int> period, vector<int> interval, int n, int s) {
        // write code here
        int result = 99999999 ;
        for ( int i = 0; i < n; ++ i ) {
            int tmp = s % interval[i] ;
            int wait_time ;
            if ( tmp == 0 ) wait_time = 0 ;
            else wait_time = interval[i] - tmp ;
            int total = ( stops[i] * period[i] ) + ( stops[i] + 1 ) * 5 + wait_time ;
            if ( total < result ) result = total ;
        }
        return result + s ;
    }
};