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;
    }
};
相关推荐
灵感__idea5 小时前
Hello 算法:“走一步看一步”的智慧
前端·javascript·算法
lwf0061647 小时前
导数学习日记
学习·算法·机器学习
头发够用的程序员8 小时前
从滑动窗口到矩阵运算:img2col算法基本原理
人工智能·算法·yolo·性能优化·矩阵·边缘计算·jetson
武帝为此8 小时前
【数据清洗缺失值处理】
python·算法·数学建模
Halo_tjn9 小时前
Java 基于字符串相关知识点
java·开发语言·算法
念越9 小时前
算法每日一题 Day08|双指针法解决三数之和
算法·力扣
黎阳之光9 小时前
黎阳之光透明管理:视频孪生重构智慧仓储新范式
人工智能·算法·安全·重构·数字孪生
6Hzlia10 小时前
【Hot 100 刷题计划】 LeetCode 199. 二叉树的右视图 | C++ DFS 逆序遍历
c++·leetcode·深度优先
CappuccinoRose10 小时前
回溯法 - 软考备战(四十三)
算法·排列组合·路径·n皇后·子集·解数独·岛屿
AC赳赳老秦10 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw