LeetCode #853 Car Fleet 車隊

853 Car Fleet 車隊

Description:
There are n cars going to the same destination along a one-lane road. The destination is target miles away.

You are given two integer array position and speed, both of length n, where position[i] is the position of the ith car and speed[i] is the speed of the ith car (in miles per hour).

A car can never pass another car ahead of it, but it can catch up to it, and drive bumper to bumper at the same speed.

The distance between these two cars is ignored (i.e., they are assumed to have the same position).

A car fleet is some non-empty set of cars driving at the same position and same speed. Note that a single car is also a car fleet.

If a car catches up to a car fleet right at the destination point, it will still be considered as one car fleet.

Return the number of car fleets that will arrive at the destination.

Example:

Example 1:

Input: target = 12, position = [10,8,0,5,3], speed = [2,4,1,1,3]
Output: 3
Explanation:
The cars starting at 10 and 8 become a fleet, meeting each other at 12.
The car starting at 0 doesn't catch up to any other car, so it is a fleet by itself.
The cars starting at 5 and 3 become a fleet, meeting each other at 6.
Note that no other cars meet these fleets before the destination, so the answer is 3.

Example 2:

Input: target = 10, position = [3], speed = [3]
Output: 1

Constraints:

n == position.length == speed.length
1 <= n <= 10^5
0 < target <= 10^6
0 <= position[i] < target
All the values of position are unique.
0 < speed[i] <= 10^6

題目描述:
N 輛車沿著一條車道駛向位于 target 英里之外的共同目的地。

每輛車 i 以恒定的速度 speed[i] (英里/小時),從初始位置 position[i] (英里) 沿車道駛向目的地杉允。

一輛車永遠不會超過前面的另一輛車,但它可以追上去,并與前車以相同的速度緊接著行駛财岔。

此時吞杭,我們會忽略這兩輛車之間的距離,也就是說俘种,它們被假定處于相同的位置秤标。

車隊 是一些由行駛在相同位置、具有相同速度的車組成的非空集合宙刘。注意苍姜,一輛車也可以是一個車隊。

即便一輛車在目的地才趕上了一個車隊悬包,它們仍然會被視作是同一個車隊衙猪。

會有多少車隊到達目的地?

示例 :

輸入:target = 12, position = [10,8,0,5,3], speed = [2,4,1,1,3]
輸出:3
解釋:
從 10 和 8 開始的車會組成一個車隊,它們在 12 處相遇。
從 0 處開始的車無法追上其它車垫释,所以它自己就是一個車隊丝格。
從 5 和 3 開始的車會組成一個車隊,它們在 6 處相遇棵譬。
請注意显蝌,在到達目的地之前沒有其它車會遇到這些車隊,所以答案是 3订咸。

提示:

0 <= N <= 10 ^ 4
0 < target <= 10 ^ 6
0 < speed[i] <= 10 ^ 6
0 <= position[i] < target
所有車的初始位置各不相同曼尊。

思路:

先按照 position 排序
然后計算各車到達 target 的時間
用單調棧或者從后往前遍歷時間數組
時間較少的可以組合成一個車隊
時間復雜度為 O(nlgn), 空間復雜度為 O(n)

代碼:
C++:

class Solution 
{
public:
    int carFleet(int target, vector<int>& position, vector<int>& speed) 
    {
        map<int, int> cars;
        for (int i = 0; i < position.size(); i++) cars[position[i]] = speed[i];
        stack<float> s;
        for (auto& [position, v] : cars) 
        {
            float time = float(target - position) / v;
            while (!s.empty() and time >= s.top()) s.pop();
            s.push(time);
        }
        return s.size();
    }
};

Java:

class Solution 
{
    public int carFleet(int target, int[] position, int[] speed) 
    {
        TreeMap<Integer, Integer> cars = new TreeMap<>();
        for (int i = 0; i < position.length; i++) cars.put(position[i], speed[i]);
        Stack<Double> stack = new Stack<>();
        for (Map.Entry<Integer, Integer> entry : cars.entrySet()) {
            double time = ((double)(target - entry.getKey())) / entry.getValue();
            while (!stack.empty() && time >= stack.peek()) stack.pop();
            stack.push(time);
        }
        return stack.size();
    }
}

Python:

class Solution:
    def carFleet(self, target: int, position: List[int], speed: List[int]) -> int:
        cars = sorted(zip(position, speed))
        times, result = [float(target - p) / s for p, s in cars], 0
        while len(times) > 1:
            lead = times.pop()
            if lead < times[-1]: 
                result += 1
            else:
                times[-1] = lead
        return result + bool(times)
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末脏嚷,一起剝皮案震驚了整個濱河市骆撇,隨后出現的幾起案子,更是在濱河造成了極大的恐慌父叙,老刑警劉巖神郊,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異趾唱,居然都是意外死亡涌乳,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門鲸匿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爷怀,“玉大人,你說我怎么就攤上這事带欢≡耸冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵乔煞,是天一觀的道長吁朦。 經常有香客問我,道長渡贾,這世上最難降的妖魔是什么逗宜? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮空骚,結果婚禮上纺讲,老公的妹妹穿的比我還像新娘。我一直安慰自己囤屹,他們只是感情好熬甚,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肋坚,像睡著了一般乡括。 火紅的嫁衣襯著肌膚如雪肃廓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天诲泌,我揣著相機與錄音盲赊,去河邊找鬼。 笑死敷扫,一個胖子當著我的面吹牛哀蘑,可吹牛的內容都是我干的。 我是一名探鬼主播葵第,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼递礼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了羹幸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辫愉,失蹤者是張志新(化名)和其女友劉穎栅受,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體恭朗,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡屏镊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了痰腮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片而芥。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖膀值,靈堂內的尸體忽然破棺而出棍丐,到底是詐尸還是另有隱情,我是刑警寧澤沧踏,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布歌逢,位于F島的核電站,受9級特大地震影響翘狱,放射性物質發(fā)生泄漏秘案。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一潦匈、第九天 我趴在偏房一處隱蔽的房頂上張望阱高。 院中可真熱鬧,春花似錦茬缩、人聲如沸赤惊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荐捻。三九已至黍少,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間处面,已是汗流浹背厂置。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魂角,地道東北人昵济。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像野揪,于是被迫代替她去往敵國和親访忿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容

  • 853. Car Fleet Medium N cars are going to the same destin...
    山中散人的博客閱讀 271評論 0 2
  • 關于IT的英語 win10 系統 win + x apps and features 應用和功能 feature:...
    我要寫小說閱讀 3,848評論 0 1
  • 題目 概述:N輛車沿著一條車道駛向位于target英里之外的共同目的地斯稳,每輛車i以恒定的速度speed[i]從初始...
    三次元螞蟻閱讀 176評論 0 1
  • 難度:★★★☆☆類型:數組方法:棧 力扣鏈接請移步本題傳送門[https://leetcode-cn.com/pr...
    玖月晴閱讀 60評論 0 0
  • N 輛車沿著一條車道駛向位于 target 英里之外的共同目的地海铆。 每輛車 i 以恒定的速度 speed[i] ...
    燒書煮石_閱讀 213評論 0 0