leetcode 1018

1018: 可被5整除的二进制前缀

题意:计算 nums 每个前缀的二进制数值 x,判断 x 是否为 5 的倍数。

比如 nums=[1,1,0,1],每个前缀对应的二进制数分别为 1,11,110,1101。如何计算这些二进制数呢?在十进制中,我们往 12 的右边添加 3,得到 123,做法是 12⋅10+3=123。对于二进制,做法类似,往 110 的右边添加 1,得到 1101,做法是 110⋅2+1=1101,或者 110 << 1 ∣ 1=1101。

注意本题 nums 很长,算出的二进制数 x 很大,但我们只需要判断 xmod5=0 是否成立。可以在中途取模,也就是每次循环计算出新的 x 后,把 x 替换成 xmod5。为什么可以在中途取模?

**模运算对乘法和加法具有分配律,所以每一步更新时都可以先取模再运算,不影响最终模 5 的结果。**这样既节省了空间,又避免了超大整数问题。

复制代码
class Solution {
public:
    vector<bool> prefixesDivBy5(vector<int>& nums) {
        vector<bool> ans;
        int x=0;
        for(int i=0;i<nums.size();i++){
            x=(x<<1 | nums[i])%5;  //等价于x*2+nums[i]
            ans.push_back(x==0);
        }

        return ans;
    }
};
相关推荐
会员源码网10 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing11 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader12 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱14 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng89716 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮1 天前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者2 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶