前言
每天和你一起刷 LeetCode 每日一题~
LeetCode 启动!
题目:按位与结果大于零的最长组合
代码与解题思路
先读题:题目给了一个数组,让我们在数组选择一个 子序列 ,子序列中所有的数 按位与 的结果要大于 0
核心问题就在于,如何在 O(N) 的复杂度下,找到最长的所有数按位与大于 0 的子序列,常见的思路是通过枚举元素的比特位达成目的
枚举比特位:举个例子,让数组每一个元素的第一位进行 & 操作,只要 == 1 就证明结果必定 > 0,让计数++,具体代码如下:
func largestCombination(candidates []int) (ans int) {
n := bits.Len(uint(slices.Max(candidates))) // 获取数组中最长的比特位
for i := range n {
cnt := 0 // 记录每个比特位能达成的最长长度
for _, v := range candidates {
cnt += v>>i & 1 // 如果 & 1 == 1 长度就 + 1
}
ans = max(ans, cnt)
}
return ans
}
每天进步一点点,我们明天不见不散~
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。