Re: [閒聊] 每日LeetCode已回收

看板Marginalman作者 (是oin的說)時間1年前 (2024/02/08 19:17), 編輯推噓3(305)
留言8則, 5人參與, 1年前最新討論串661/719 (看更多)
https://leetcode.com/problems/successful-pairs-of-spells-and-potions/ 今天的做過惹 來做個別的 題目: 給你一串spells跟potions 還有success 問你某個spells乘上全部potions 會大於success的有幾個 舉例比較好說明= = 舉例: spells 是 3,1,2 potions 是 1,2,3,4,5 success 是 10 這樣對於spells的3來說 乘起來會變 3,6,9,12,15 12 15超過success 所以有兩個 對spells的1 乘起來會變 1,2,3,4,5 一個都沒有 對spells的2 乘起來會變 2,4,6,8,10 10剛好 所以有一個 解法: 對每個spells[i]去對potions二分搜 然後就好了 對ㄚ 二份搜真的很靠北 不管是手刻還是用他的函式 都要知道他什麼時候停下來要拿什麼東西 很煩 ```cpp class Solution { public: vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) { sort(potions.begin() , potions.end() , less<int>() ); // for(int k : potions) // { // printf("%d ",k); // } // printf("\n============\n"); int len = spells.size(); int lenp = potions.size(); vector<int> res(len , 0); for(int si = 0 ; si < len ; si ++) { int l = 0; int r = lenp-1; int m = 0 ; while(l <= r) { m = (l+r)/2 ; long long ress = ((long long)potions[m] * (long long)spells[si]) ; // printf("%d = %d * %d , l:%d r:%d \n",ress,potions[m],spells[s i],l,r); if(ress < success) { l = m+1; } else if (ress >= success) { r = m-1; } } // printf("l:%d r:%d\n",l,r); // printf("============\n"); res[si] = (lenp) - l; } return res; } }; ``` -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.50.234 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1707391027.A.B27.html

02/08 19:17, 1年前 , 1F
大師
02/08 19:17, 1F

02/08 19:18, 1年前 , 2F
你用Python刷 有built-in
02/08 19:18, 2F

02/08 19:18, 1年前 , 3F
然後回傳每個的陣列 所以是[2,0,1]
02/08 19:18, 3F

02/08 19:19, 1年前 , 4F
我記得cpp也有內建函式 但是我想刻刻看
02/08 19:19, 4F

02/08 19:19, 1年前 , 5F
C++20才有
02/08 19:19, 5F

02/08 19:21, 1年前 , 6F
:O
02/08 19:21, 6F

02/08 19:55, 1年前 , 7F
大師
02/08 19:55, 7F

02/08 20:55, 1年前 , 8F
大師
02/08 20:55, 8F
文章代碼(AID): #1bnBWpid (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1bnBWpid (Marginalman)