🗒️2588. 统计美丽子数组数目
2025-1-27
| 2025-1-27
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 27, 2025 03:30 PM
给你一个下标从 0 开始的整数数组nums 。每次操作中,你可以:
  • 选择两个满足 0 <= i, j < nums.length 的不同下标 i 和 j 。
  • 选择一个非负整数 k ,满足 nums[i] 和 nums[j] 在二进制下的第 k 位(下标编号从 0 开始)是 1 。
  • 将 nums[i] 和 nums[j] 都减去 2k 。
如果一个子数组内执行上述操作若干次后,该子数组可以变成一个全为 0 的数组,那么我们称它是一个 美丽 的子数组。
请你返回数组 nums 中 美丽子数组 的数目。
子数组是一个数组中一段连续 非空 的元素序列。

位运算——与或(AND/OR)

暴力做法

哈希表

本来是根据前缀和和异或的性质,求数组中有多少数对满足 s[l] ^ s[r + 1] = 0
暴力运算的结果
上面的朴素运算会超时。而本质上是 s[r + 1] == s[l],也就是前缀和数组中有多少相等的数对。我们参考 1. 两数之和 的做法,使用哈希表保存之前的出现的数字,后面出现相同数,直接加上次数。优化了时间复杂度。

先前缀和,后循环计算

边计算,边循环计算

📎 参考

  • 【题单】位运算
  • 2871. 将数组分割成最多数目的子数组2419. 按位与最大的最长子数组
    Loading...