leetcode 2154

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;
      }

    };

相关推荐
Darkwanderor14 小时前
什么数据量适合用什么算法
c++·算法
zc.ovo14 小时前
河北师范大学2026校赛题解(A,E,I)
c++·算法
py有趣14 小时前
力扣热门100题之环形链表
算法·leetcode·链表
py有趣14 小时前
力扣热门100题之回文链表
算法·leetcode·链表
月落归舟16 小时前
帮你从算法的角度来认识二叉树---(二)
算法·二叉树
SilentSlot17 小时前
【数据结构】Hash
数据结构·算法·哈希算法
样例过了就是过了18 小时前
LeetCode热题100 柱状图中最大的矩形
数据结构·c++·算法·leetcode
wsoz18 小时前
Leetcode哈希-day1
算法·leetcode·哈希算法
阿Y加油吧18 小时前
LeetCode 二叉搜索树双神题通关!有序数组转平衡 BST + 验证 BST,小白递归一把梭
java·算法·leetcode