2154: 将找到的值乘以2
返回不在 nums 中的最小的 original*2^k,其中 k 是非负整数。
思路1:枚举
class Solution {
public:
int findFinalValue(vector<int>& nums, int original) {
unordered_set<int> st(nums.begin(), nums.end());
while (st.contains(original)){
original *= 2;
}
return original;
}
};
思路2:只记录所有可能值
哈希集合记录的元素可以更少,只需要记录符合 original*2^k 的元素。

设 x=nums[i],如果 x=original*2^k,那么:
-
x 是 original 的倍数。
-
x/original 是2的幂。
class Solution {
public:
int findFinalValue(vector<int>& nums, int original) {
unordered_set<int> st;
for(int x :nums){
int k=x/original;
if(x%original==0 && (k&(k-1))==0){
st.insert(x);
}
}
while(st.contains(original)){
original*=2;
}return original; }};