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 的个数。

相关推荐
IT猿手24 分钟前
超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
人工智能·算法·机器学习·matlab·无人机
Erik_LinX33 分钟前
算法日记25:01背包(DFS->记忆化搜索->倒叙DP->顺序DP->空间优化)
算法·深度优先
Alidme40 分钟前
cs106x-lecture14(Autumn 2017)-SPL实现
c++·学习·算法·codestepbystep·cs106x
小王努力学编程41 分钟前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode
最遥远的瞬间43 分钟前
15-贪心算法
算法·贪心算法
维齐洛波奇特利(male)2 小时前
(动态规划 完全背包 **)leetcode279完全平方数
算法·动态规划
项目申报小狂人3 小时前
改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
开发语言·算法·matlab
让我们一起加油好吗3 小时前
【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
c语言·算法·排序算法
夏末秋也凉3 小时前
力扣-贪心-53 最大子数组和
数据结构·算法·leetcode
liruiqiang054 小时前
机器学习 - 投票感知器
人工智能·算法·机器学习