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

LeetCode2595

LeetCode2595

目录

  • 题目描述
  • 示例
  • 思路分析
  • 代码段
  • 代码逐行讲解
  • 复杂度分析
  • 总结的知识点
  • 整合
  • 总结

题目描述

给你一个整数 n,请你返回一个长度为 2 的数组 ans,其中:

  • ans[0]n 的二进制表示中偶数下标(从 0 开始)的 1 的个数。
  • ans[1]n 的二进制表示中奇数下标的 1 的个数。

示例

示例 1

输入:

n = 17

输出:

[2, 0]

解释:

  • 17 的二进制表示为 10001
  • 偶数下标(0, 2, 4)中有 2 个 1。
  • 奇数下标(1, 3)中有 0 个 1。

示例 2

输入:

n = 2

输出:

[0, 1]

解释:

  • 2 的二进制表示为 10
  • 偶数下标(0)中有 0 个 1。
  • 奇数下标(1)中有 1 个 1。

思路分析

问题核心

我们需要统计整数 n 的二进制表示中,偶数下标和奇数下标的 1 的个数。

思路拆解

  1. 二进制遍历
    • 从最低位开始遍历 n 的二进制表示。
  2. 奇偶下标统计
    • 使用一个变量 i 表示当前下标,初始值为 0(偶数)。
    • 每次遍历后,i 在 0 和 1 之间切换,表示偶数下标和奇数下标。
  3. 统计 1 的个数
    • 如果当前二进制位是 1,则根据 i 的值更新 ans[0]ans[1]
  4. 右移操作
    • 每次遍历后,将 n 右移 1 位,继续处理下一个二进制位。

代码段

class Solution {
    public int[] evenOddBit(int n) {
        int[] ans = new int[2]; 
        for (int i = 0; n > 0; n >>= 1, i ^= 1) { 
            ans[i] += n & 1; 
        }
        return ans;
    }
}

在这里插入图片描述


代码逐行讲解

1. 初始化结果数组

int[] ans = new int[2];
  • ans 是一个长度为 2 的数组,ans[0] 用于存储偶数下标的 1 的个数,ans[1] 用于存储奇数下标的 1 的个数。

2. 遍历二进制位

for (int i = 0; n > 0; n >>= 1, i ^= 1) {
  • 从最低位开始遍历 n 的二进制表示。
  • n >>= 1:每次遍历后将 n 右移 1 位。
  • i ^= 1:每次遍历后切换 i 的值(0 和 1 之间切换),表示偶数下标和奇数下标。

3. 统计 1 的个数

ans[i] += n & 1;
  • n & 1:获取当前二进制位的最低位。
  • 如果当前二进制位是 1,则根据 i 的值更新 ans[0]ans[1]

4. 返回结果

return ans;
  • 返回结果数组 ans

复杂度分析

时间复杂度

  • 遍历 n 的二进制表示,时间复杂度为 O(log n)

空间复杂度

  • 只使用了常数级别的额外空间,因此空间复杂度为 O(1)

总结的知识点

1. 二进制操作

  • 使用右移操作 n >>= 1 遍历二进制位。
  • 使用按位与操作 n & 1 获取最低位。

2. 奇偶下标切换

  • 使用 i ^= 1 在 0 和 1 之间切换,表示偶数下标和奇数下标。

3. 数组操作

  • 使用数组 ans 统计偶数下标和奇数下标的 1 的个数。

整合

class Solution {
    public int[] evenOddBit(int n) {
        int[] ans = new int[2]; // 初始化结果数组
        for (int i = 0; n > 0; n >>= 1, i ^= 1) { // 遍历二进制位
            ans[i] += n & 1; // 统计 1 的个数
        }
        return ans; // 返回结果
    }
}

总结

通过遍历 n 的二进制表示,并利用奇偶下标切换统计 1 的个数。


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

相关文章:

  • 【Spring Bean如何保证并发安全?】
  • 华为动态路由-OSPF-综合案例
  • 客户关系管理系统(源码+文档+演示+讲解)
  • 计算机专业知识【深入理解 IP 地址与子网掩码:从 /27 到不同 CIDR 表示】
  • FPGA DSP:Vivado 中带有 DDS 的 FIR 滤波器
  • adb shell setprop获取日志
  • 解锁外观模式:Java 编程中的优雅架构之道
  • 【HeadFirst系列之HeadFirst设计模式】第6天之单件模式:独一无二的对象,如何优雅实现?
  • eBPF驱动的实时内核安全防护体系:构建零日漏洞免疫的云原生基础设施
  • Git介绍和使用
  • 使用爬虫获得亚马逊按关键字搜索商品的实战指南
  • qt:输入控件操作
  • Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(1)
  • 力扣的第34题 在排序数组中查找元素的第一个和最后一个位置
  • 设计模式教程:迭代器模式(Iterator Pattern)
  • 日期类(完全讲解版)
  • 【深度学习】手写数字识别任务
  • Go 之 Beego 配置文件
  • iOS各个证书生成细节
  • Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory