开云(中国)一站式服务官网 2026-06-01: 按位与限定非零的最长高涨子序列。用go话语, 给定一

2026-06-01:按位与限定非零的最长高涨子序列。用go话语,给定一个整数数组 nums。你需要在其中选拔一个子序列,使它的元素严格递加,况兼把该子序列通盘元素作念按位与运算(AND),终末得到的限定必须曲直零。要求该子序列的长度尽可能大,并复返这个最大长度;淌若不存在安静条款的子序列,就复返 0。子序列要求保抓原数组的相对规律,中国开云体育只可删除元素,不可改动规律。
1
0
输入: nums = [5,4,7]。
输出: 2。
阐述:
一个最长严格递加子序列是 [5, 7]。按位与的限定是 5 AND 7 = 5,限定为非零。
题目来独力扣3825。
大体才能如下:
Go完竣代码如下:
package main
import (
"fmt"
"sort"
)
func longestSubsequence(nums []int)int {
ans := 0
for bit := 0; bit
list := []int{}
for _, x := range nums {
if x&(1
// lower_bound 的等价扫尾
idx := sort.SearchInts(list, x)
if idx == len(list) {
list = append(list, x)
2026世界杯官方指定中国区认证平台} else {
list[idx] = x
}
}
}
iflen(list) > ans {
ans = len(list)
}
}
return ans
}
func main {
nums := []int{5, 4, 7}
result := longestSubsequence(nums)
fmt.Println(result)
}

Python完竣代码如下:
# -*-coding:utf-8-*-
from bisect import bisect_left
def longestSubsequence(nums):
ans = 0
for bit in range(32):
lst = []
for x in nums:
if x & (1
# lower_bound 的等价扫尾
idx = bisect_left(lst, x)
if idx == len(lst):
lst.append(x)
else:
lst[idx] = x
ans = max(ans, len(lst))
return ans
if __name__ == "__main__":
nums = [5, 4, 7]
result = longestSubsequence(nums)
print(result)

C++完竣代码如下:
#include
#include
#include
using namespace std;
class Solution {
public:
int longestSubsequence(vector& nums) {
int ans = 0;
for (int bit = 0; bit
vector list;
for (int x : nums) {
if (x & (1
// lower_bound 的等价扫尾
auto idx = lower_bound(list.begin, list.end, x);
if (idx == list.end) {
list.push_back(x);
} else {
*idx = x;
}
}
}
if ((int)list.size > ans) {
ans = (int)list.size;
}
}
return ans;
}
};
int main {
Solution sol;
vector nums = {5, 4, 7};
int result = sol.longestSubsequence(nums);
cout
return0;
}

咱们校服东说念主工智能为平凡东说念主提供了一种“增强用具”,并奋勉于共享全标的的AI学问。在这里,您不错找到最新的AI科普著作、用具评测、擢升效果的隐秘以及行业知悉。
饶恕善良“福大大架构师逐日一题”开云(中国)一站式服务官网,发音信可取得口试府上,让AI助力您的改日发展。
