LeetCode2595

LeetCode2595

目录


题目描述

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

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

示例

示例 1

输入:

java 复制代码
n = 17

输出:

java 复制代码
[2, 0]

解释:

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

示例 2

输入:

java 复制代码
n = 2

输出:

java 复制代码
[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 位,继续处理下一个二进制位。

代码段

java 复制代码
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. 初始化结果数组

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

2. 遍历二进制位

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

3. 统计 1 的个数

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

4. 返回结果

java 复制代码
return ans;
  • 返回结果数组 ans

复杂度分析

时间复杂度

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

空间复杂度

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

总结的知识点

1. 二进制操作

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

2. 奇偶下标切换

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

3. 数组操作

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

整合

java 复制代码
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 的个数。

相关推荐
仰泳的熊猫25 分钟前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
无极低码4 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发4 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre5 小时前
22 括号生成
算法·深度优先
努力也学不会java6 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎6 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan6 小时前
朱梁万有递归元定理,重构《易经》
算法·重构
智者知已应修善业7 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe7 小时前
C++并发编程中的死锁避免
开发语言·c++·算法