Re: [閒聊] 每日LeetCode

作者: oin1104 (是oin的說)   2024-02-08 19:17:05
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;
}
};
```
作者: digua (地瓜)   2023-02-08 19:17:00
大師
作者: Apache (阿帕契)   2024-02-08 19:18:00
你用Python刷 有built-in
作者: oin1104 (是oin的說)   2024-02-08 19:18:00
然後回傳每個的陣列 所以是[2,0,1]我記得cpp也有內建函式 但是我想刻刻看
作者: Apache (阿帕契)   2024-02-08 19:19:00
C++20才有
作者: oin1104 (是oin的說)   2024-02-08 19:21:00
:O
作者: SecondRun (雨夜琴聲)   2024-02-08 19:55:00
大師
作者: DJYOSHITAKA (Evans)   2024-02-08 20:55:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com