统计按位或能得到最大值的子集数目(三) 方法二回溯思路记 n 是数组 nums 的长度。方法一的缺点是计算不同状态的按位或的值都需要消耗 O(n) 的时间。这一步部分可以进行优化。每个长度为 n 比特的状态的按位或的值都是可以在长度为 n−1 比特的状态的按位或的值上计算出来的而这个计算只需要消耗常数时间。以此类推边界情况是长度为 0 比特的状态的按位或的值。我们定义一个搜索函数参数 pos 表示当前下标orVal 表示当前下标之前的某个子集按位或值这样就可以保存子集按位或的值的信息并根据当前元素选择与否更新 orVal 。当搜索到最后位置时更新最大值和子集个数。代码Python3class Solution: def countMaxOrSubsets(self, nums: List[int]) - int: maxOr, cnt 0, 0 def dfs(pos: int, orVal: int) - None: if pos len(nums): nonlocal maxOr, cnt if orVal maxOr: maxOr, cnt orVal, 1 elif orVal maxOr: cnt 1 return dfs(pos 1, orVal | nums[pos]) dfs(pos 1, orVal) dfs(0, 0) return cntJavaclass Solution { int[] nums; int maxOr, cnt; public int countMaxOrSubsets(int[] nums) { this.nums nums; this.maxOr 0; this.cnt 0; dfs(0, 0); return cnt; } public void dfs(int pos, int orVal) { if (pos nums.length) { if (orVal maxOr) { maxOr orVal; cnt 1; } else if (orVal maxOr) { cnt; } return; } dfs(pos 1, orVal | nums[pos]); dfs(pos 1, orVal); } }C#public class Solution { int[] nums; int maxOr, cnt; public int CountMaxOrSubsets(int[] nums) { this.nums nums; this.maxOr 0; this.cnt 0; DFS(0, 0); return cnt; } public void DFS(int pos, int orVal) { if (pos nums.Length) { if (orVal maxOr) { maxOr orVal; cnt 1; } else if (orVal maxOr) { cnt; } return; } DFS(pos 1, orVal | nums[pos]); DFS(pos 1, orVal); } }Cclass Solution { public: int countMaxOrSubsets(vectorint nums) { this-nums nums; this-maxOr 0; this-cnt 0; dfs(0, 0); return cnt; } void dfs(int pos, int orVal) { if (pos nums.size()) { if (orVal maxOr) { maxOr orVal; cnt 1; } else if (orVal maxOr) { cnt; } return; } dfs(pos 1, orVal| nums[pos]); dfs(pos 1, orVal); } private: vectorint nums; int maxOr, cnt; };Cvoid dfs(int pos, int orVal, const int* nums, int numsSize, int* maxOr, int* cnt) { if (pos numsSize) { if (orVal *maxOr) { *maxOr orVal; *cnt 1; } else if (orVal *maxOr) { (*cnt); } return; } dfs(pos 1, orVal | nums[pos], nums, numsSize, maxOr, cnt); dfs(pos 1, orVal, nums, numsSize, maxOr, cnt); } int countMaxOrSubsets(int* nums, int numsSize) { int cnt 0; int maxOr 0; dfs(0, 0, nums, numsSize, maxOr, cnt); return cnt; }复杂度分析时间复杂度O(2n) 其中 n 是数组 nums 的长度。状态数一共有 O(20 21 ... 2n) O(2×2n) O(2n) 种每次计算只消耗常数时间。空间复杂度O(n) 其中 n 是数组 nums 的长度。搜索深度最多为 n 。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/28 1:37:33
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/27 19:13:42
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/27 15:27:56
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/27 19:54:03
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 9:16:41
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/28 2:08:29

日新闻

周新闻