Re: [閒聊] 每日leetcode

看板Marginalman作者 (franchouchouISBEST)時間1周前 (2024/05/10 23:11), 1周前編輯推噓4(404)
留言8則, 5人參與, 1周前最新討論串207/271 (看更多)
一開始自以為 想說 假設現在heap top是 arr[i]/arr[j] 那比它小一個的一定是 arr[i+1]/arr[j] or arr[i]/arr[j-1] 所以我就兩個都推進去 下次pop出來就會是下一個最小的值,且可以handle k>n的case 所以我這樣寫 vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) { auto cmp = [&arr](pair<int,int> f1, pair<int,int> f2) { return (arr[f1.first]*arr[f2.second]) > (arr[f1.second]*arr[f2.first]); }; priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)> pq(cmp); int n = arr.size(); //init pq.push({0, n-1}); for(int i=0; i<k-1; i++) { auto [nume_idx, deno_idx] = pq.top(); pq.pop(); if((nume_idx != deno_idx-1)) { pq.push({nume_idx+1, deno_idx}); pq.push({nume_idx, deno_idx-1}); } } return {arr[pq.top().first], arr[pq.top().second]}; } 結果這樣會找到重複pairㄚ操 頭腦太簡單了 乖乖看安殺== 確實能確保不推到重覆pair 要定分母or定分子ㄚ 哀 又想漬了 vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) { auto cmp = [&arr](pair<int,int> f1, pair<int,int> f2) { return (arr[f1.first]*arr[f2.second]) > (arr[f1.second]*arr[f2.first]); }; priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)> pq(cmp); int n = arr.size(); //init for(int i=1; i<n; i++) pq.push({0, i}); for(int i=0; i<k-1; i++) { auto [nume_idx, deno_idx] = pq.top(); pq.pop(); if((nume_idx < deno_idx-1)) pq.push({nume_idx+1, deno_idx}); } return {arr[pq.top().first], arr[pq.top().second]}; } 其實就是把所有分數排成n-1排 arr[0]/arr[n-1] → arr[1]/arr[n-1] → arr[2]/arr[n-1] → … arr[0]/arr[n-2] → arr[1]/arr[n-2] → arr[2]/arr[n-2] → … … arr[0]/arr[1] 每一排我們都可以確保前面比後面小 接下來就只要每個round確認哪一排的排頭最小,pop出來 pop K次就是答案了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.228.146.144 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1715353897.A.4BB.html

05/10 23:12, 1周前 , 1F
大師
05/10 23:12, 1F

05/10 23:20, 1周前 , 2F
我早上簡單想一下也覺得是這樣
05/10 23:20, 2F

05/10 23:21, 1周前 , 3F
然後多想一遍就發現滿麻煩的==就專心工作惹
05/10 23:21, 3F
你是大師 ※ 編輯: DJYOSHITAKA (125.228.146.144 臺灣), 05/10/2024 23:29:08

05/10 23:28, 1周前 , 4F
大師
05/10 23:28, 4F

05/10 23:29, 1周前 , 5F
我一開始本來是想到heap 但複雜度都破表
05/10 23:29, 5F

05/10 23:29, 1周前 , 6F
後來就看溫莎了
05/10 23:29, 6F

05/10 23:35, 1周前 , 7F
大師
05/10 23:35, 7F

05/10 23:35, 1周前 , 8F
愛溫莎:(
05/10 23:35, 8F
文章代碼(AID): #1cFZafIx (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1cFZafIx (Marginalman)