日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

LintCode 1677. 石头(自定义优先队列)

發布時間:2024/7/5 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LintCode 1677. 石头(自定义优先队列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定數組 p 代表 n 個石頭的位置和數組 d 代表這 n 塊石頭能夠扔的距離。

從左(0位置)往右走。當你第 k 次碰到一個石頭時,
如果 k 是奇數, 把這個石頭往右扔;
如果 k 是偶數,跳過這個石頭。

返回不再會碰到石頭時,最右邊的石頭的位置。

樣例 1: 輸入: p = [1, 2], d = [5, 4] 輸出: 11 解釋: 一開始,位置1上的石頭扔到位置6。然后跳過位置2的石頭。接著位置6的時候被扔到位置11。最后跳過位置11的石頭。樣例 2: 輸入: p = [1, 6], d = [5, 6] 輸出: 12 解釋: 一開始,位置1上的石頭扔到位置6。然后跳過位置6的石頭(更大的石頭)。接著位置6的時候被扔到位置12。最后跳過位置12的石頭。注意事項 n <= 10^4 p[i] <= 10^5 d[i] <= 10^3 如果兩個或多個石頭停留在相同位置, 你先碰到的是最大的石頭(**d[i] 最小**的石頭)。 意味著首先扔或跳過較大的石頭。

2. 解題

unordered_map<int,int> m;// 序號idx,石頭能扔的dis距離 struct cmp {bool operator()(const auto& a,const auto& b){if(a.second == b.second)//距離一樣,小的先出隊return m[a.first] > m[b.first];return a.second > b.second;//距離近的先出隊} };class Solution { public:int getDistance(vector<int> &p, vector<int> &d) {if(p.size() == 0)return 0;bool flag = true;priority_queue<pair<int,int>,vector<pair<int,int>>,cmp> q;// pair :序號 idx, 石頭位置for(int i = 0; i < p.size(); ++i){m[i] = d[i];// idx,能扔的disq.push(make_pair(i, p[i]));//初始位置}pair<int,int> tp;while(!q.empty()){tp = q.top();q.pop();if(flag){q.push(make_pair(tp.first, tp.second+m[tp.first]));}flag = !flag;//奇偶交替}return tp.second;} };

100% 數據通過測試
總耗時 100 ms
您的提交打敗了 46.88% 的提交!

總結

以上是生活随笔為你收集整理的LintCode 1677. 石头(自定义优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。