作者oin1104 (是oin的說)
看板Marginalman
標題Leetcode Biweekly Contest
時間Sun Oct 13 10:03:22 2024
這次第三題沒有想出來
只寫12 大概6000名
我是大便
第1 2題
給你一串陣列 對於每個數字 n
找一個數字k
讓 k|k+1== n
要找到最小的k
思路
因為要最小
就想什麼情況可以最有效率的弄出那個數字n
然後假設一下數字
就例如00110111
發現 00110100
跟他的-1 00110011剛好可以or出n
所以就看她右邊有幾個1連在一起
```cpp
class Solution {
public:
string tobit(int k)
{
string kk ;
while(k > 0)
{
if(k&1)kk.push_back('1');
else kk.push_back('0');
k >>= 1;
}
reverse(kk.begin(), kk.end());
return kk;
}
int toint(string k)
{
reverse(k.begin(), k.end());
int kk = 0;
while(k.size() > 0)
{
kk <<= 1;
kk += k[k.size()-1]-'0';
k.pop_back();
}
return kk;
}
vector<int> minBitwiseArray(vector<int>& nums)
{
int n = nums.size();
vector<int> res(n);
for(int i = 0 ; i < n ; i ++)
{
string now = tobit(nums[i]);
int nown = now.size()-1;
while( nown >= 0 && now[nown] == '1' )
{
now[nown] = '0';
nown--;
}
now[nown+1] = '1';
int pain = toint(now)-1;
res[i] = pain;
if((pain|(pain+1) )!= nums[i]) res[i] = -1;
}
return res;
}
};
```
第3題
這題是dp
但我沒有想出來
第4題
沒看
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.12.19.26 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1728785004.A.C83.html
→ sustainer123: 你怎麼那麼猛 10/13 10:04
推 napacabbage: 你好認真 10/13 10:04
推 DJYOSHITAKA: 我是垃圾 10/13 10:05