乘坐公交(貪心演算法)----去哪兒2016研發工程師程式設計題
阿新 • • 發佈:2019-01-27
[程式設計題] 乘坐公交
小明到達公司的時間由三部分組成:起床時間,等車時間,車的行駛時間 起床時間是固定的s。 等車時間取決於起床時間s與發車間隔interval。如果s%interval為0,則等車時間是0;否則等車時間是(interval-s%interval)。
車的行駛時間,包括停車時間與行駛時間,即 (停站數+1)*5分鐘+停站數*停車時間。
取等車時間+行駛時間的最小值即可,返回時記得加上起床時間。
從小明家所在公交站出發有n路公交到公司,現給出每路公交的停站數(不包括起點和終點),及每次停的時間(一路車在每個站停的時間相同)和發車的間隔,先假定每輛車同時在相對時間0分開始發車,且所有車在相鄰兩個站之間的耗時相同,都為5分鐘。給定小明起床的相對時間(相對0的分鐘數),請計算他最早到達公司的相對時間。
給定每路車的停站數stops,停站時間period,發車間隔interval及公交路數n,出發時間s。請返回最早到達時間。保證公交路數小於等於500,停站數小於等於50。
小明到達公司的時間由三部分組成:起床時間,等車時間,車的行駛時間 起床時間是固定的s。 等車時間取決於起床時間s與發車間隔interval。如果s%interval為0,則等車時間是0;否則等車時間是(interval-s%interval)。
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 ;
}
};