当前位置: 首页 > article >正文

力扣LeetCode:2595 奇偶位数

题目:

给你一个  整数 n 。

用 even 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的偶数下标的个数。

用 odd 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的奇数下标的个数。

返回整数数组 answer ,其中 answer = [even, odd] 。

示例 1:

输入:n = 17
输出:[2,0]
解释:17 的二进制形式是 10001 。 
下标 0 和 下标 4 对应的值为 1 。 
共有 2 个偶数下标,0 个奇数下标。

示例 2:

输入:n = 2
输出:[0,1]
解释:2 的二进制形式是 10 。 
下标 1 对应的值为 1 。 
共有 0 个偶数下标,1 个奇数下标。

提示:

  • 1 <= n <= 1000

解法:遍历:

代码功能

  1. 输入:一个整数 n

  2. 输出:一个长度为 2 的 vector<int>,其中:

    • 第一个元素表示 n 的二进制表示中偶数位(从 0 开始计数)上值为 1 的个数。

    • 第二个元素表示 n 的二进制表示中奇数位上值为 1 的个数。


代码逐行解释

class Solution {
public:
    vector<int> evenOddBit(int n) {
        vector<int> ans; // 用于存储 n 的二进制表示
        if(n == 0) // 特殊情况:如果 n 为 0,直接返回 {0, 0}
        {
            ans.push_back(0);
        }
        while(n > 0) // 将 n 转换为二进制,存储在 ans 中
        {
            ans.push_back(n % 2); // 取余数,得到当前最低位
            n /= 2; // 右移一位
        }
        // reverse(ans.begin(), ans.end()); // 这里注释掉了反转操作
        int num1 = 0; // 统计偶数位上 1 的个数
        int num2 = 0; // 统计奇数位上 1 的个数
        for(int i = 0; i < ans.size(); i++) // 遍历二进制位
        {
            cout << ans[i] << " "; // 打印当前二进制位(调试用)
            if(ans[i] == 1) // 如果当前位是 1
            {
                if(i % 2 == 0) // 如果是偶数位
                {
                    num1++; // 偶数位计数器加 1
                }
                else // 如果是奇数位
                {
                    num2++; // 奇数位计数器加 1
                }
            }
        }
        vector<int> num; // 用于存储最终结果
        num.push_back(num1); // 将偶数位的 1 的个数存入结果
        num.push_back(num2); // 将奇数位的 1 的个数存入结果
        return num; // 返回结果
    }
};

关键点说明

  1. 二进制转换

    • 通过 while(n > 0) 循环,将 n 转换为二进制,存储在 ans 中。

    • 注意:ans 中存储的二进制是逆序的(最低位在前)。

  2. 偶数位和奇数位的定义

    • 代码中,偶数位和奇数位是根据 i 的值来判断的:

      • i % 2 == 0:偶数位(例如,i = 0, 2, 4, ...)。

      • i % 2 != 0:奇数位(例如,i = 1, 3, 5, ...)。

    • 由于 ans 是逆序存储的,i = 0 对应的是二进制的最低位(即第 0 位),i = 1 对应的是第 1 位,依此类推。

    • 数组从右往左看!!!

  3. 统计 1 的个数

    • 遍历 ans,统计偶数位和奇数位上值为 1 的个数,分别存储在 num1 和 num2 中。

  4. 返回结果

    • 最终结果是一个长度为 2 的 vector<int>,其中第一个元素是偶数位上 1 的个数,第二个元素是奇数位上 1 的个数。


http://www.kler.cn/a/558135.html

相关文章:

  • 根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目
  • 编译原理基础(1)
  • 语义向量模型全解:从基础到现在的deepseek中的语义向量主流模型
  • 【核心算法篇二十】《DeepSeek符号回归:让AI化身「数学神探」破解数据背后的宇宙公式》
  • go flag参数 类似Java main 的args
  • 报错:Cannot read properties of null (reading ‘ce‘)解决方法
  • MyBatisPlus学习
  • Python在实际工作中的运用-Excel数据统计和数据分析
  • 网页制作06-html,css,javascript初认识のhtml如何建立超链接
  • 怎样从零基础开始学习大模型
  • oppo,汤臣倍健,康冠科技,高途教育25届春招内推
  • go基本语法
  • MySQL 成本优化器 (CBO) 深度解析
  • hi3516cv610的isp调试专业名词
  • 如何使用3D高斯分布进行环境建模
  • MySQL后端返回给前端的时间变了(时区问题)
  • 机器学习(李宏毅)——RL(强化学习)
  • Moving Assets/KrishnaPalacio to Assets/Resources: 拒绝访问。
  • Selenium+OpenCV处理滑块验证问题
  • 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(2)