golang力扣leetcode 2044.统计按位或能得到最大值的子集数目

简介: golang力扣leetcode 2044.统计按位或能得到最大值的子集数目

2044.统计按位或能得到最大值的子集数目

2044.统计按位或能得到最大值的子集数目

题解

  1. 二进制枚举,真的很巧妙,比如3瓶水,枚举所有状态,可以看出7个状态,其对应的就是某个数的二进制位,所以用二进制枚举来选择数组下标的话,则刚好可以枚举出所有的非空子集
  2. dfs,对于每一个数,只有选与不选
000 001 010
011 100 101
110 111
func binaryEnumeration() {
  for i := 0; i <= 7; i++ {
    for j := 0; j < 3; j++ {
      if i>>j&1 == 1 {
        fmt.Println(i, "的第", j+1, "个二进制位为1")
      }
    }
  }
}

代码

# 暴力枚举
func countMaxOrSubsets1(nums []int) (ans int) {
  maxOr := 0
  n := 1<<len(nums) - 1 //2^n - 1 个非空子集
  for i := 1; i <= n; i++ {
    or := 0
    for j, v := range nums {
      if i>>j&1 == 1 {
        or |= v
      }
    }
    if or > maxOr {
      maxOr = or
      ans = 1
    } else if or == maxOr {
      ans++
    }
  }
  return
}
# dfs
func countMaxOrSubsets2(nums []int) (ans int) {
  maxOr := 0
  var dfs func(int, int)
  dfs = func(pos int, or int) {
    if pos == len(nums) {
      if or > maxOr {
        maxOr = or
        ans = 1
      } else if or == maxOr {
        ans++
      }
      return
    }
    dfs(pos+1, or|nums[pos]) //选当前的值
    dfs(pos+1, or)           //不选当前的值
  }
  dfs(0, 0)
  return
}
目录
相关文章
|
5天前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
13天前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
6 0
|
13天前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
9 0
|
18天前
|
JSON Go 数据格式
技术经验分享:Golang如何解组嵌套的JSON数据的子集
技术经验分享:Golang如何解组嵌套的JSON数据的子集
|
1月前
|
算法 数据可视化 数据挖掘
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
|
2月前
|
监控 算法 Go
Golang深入浅出之-Go语言中的服务熔断、降级与限流策略
【5月更文挑战第4天】本文探讨了分布式系统中保障稳定性的重要策略:服务熔断、降级和限流。服务熔断通过快速失败和暂停故障服务调用来保护系统;服务降级在压力大时提供有限功能以保持整体可用性;限流控制访问频率,防止过载。文中列举了常见问题、解决方案,并提供了Go语言实现示例。合理应用这些策略能增强系统韧性和可用性。
153 0
|
2月前
|
前端开发 Go
Golang深入浅出之-Go语言中的异步编程与Future/Promise模式
【5月更文挑战第3天】Go语言通过goroutines和channels实现异步编程,虽无内置Future/Promise,但可借助其特性模拟。本文探讨了如何使用channel实现Future模式,提供了异步获取URL内容长度的示例,并警示了Channel泄漏、错误处理和并发控制等常见问题。为避免这些问题,建议显式关闭channel、使用context.Context、并发控制机制及有效传播错误。理解并应用这些技巧能提升Go语言异步编程的效率和健壮性。
97 5
Golang深入浅出之-Go语言中的异步编程与Future/Promise模式
|
2月前
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
177 5
|
2月前
|
监控 负载均衡 算法
Golang深入浅出之-Go语言中的协程池设计与实现
【5月更文挑战第3天】本文探讨了Go语言中的协程池设计,用于管理goroutine并优化并发性能。协程池通过限制同时运行的goroutine数量防止资源耗尽,包括任务队列和工作协程两部分。基本实现思路涉及使用channel作为任务队列,固定数量的工作协程处理任务。文章还列举了一个简单的协程池实现示例,并讨论了常见问题如任务队列溢出、协程泄露和任务调度不均,提出了解决方案。通过合理设置缓冲区大小、确保资源释放、优化任务调度以及监控与调试,可以避免这些问题,提升系统性能和稳定性。
74 6
|
2月前
|
负载均衡 算法 Go
Golang深入浅出之-Go语言中的服务注册与发现机制
【5月更文挑战第4天】本文探讨了Go语言中服务注册与发现的关键原理和实践,包括服务注册、心跳机制、一致性问题和负载均衡策略。示例代码演示了使用Consul进行服务注册和客户端发现服务的实现。在实际应用中,需要解决心跳失效、注册信息一致性和服务负载均衡等问题,以确保微服务架构的稳定性和效率。
42 3