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;
    }
};
相关推荐
不想睡觉_21 小时前
优先队列priority_queue
c++·算法
那个村的李富贵1 天前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿1 天前
Scaled Dot-Product Attention 分数计算 C++
算法
琹箐1 天前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia11 天前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了1 天前
数据结构之树(Java实现)
java·算法
算法备案代理1 天前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.1 天前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
野犬寒鸦1 天前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总1 天前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法