题目地址:
https://leetcode.com/problems/longest-subarray-with-maximum-bitwise-and/description/
给定一个长 n n n数组 A A A,求最长的子数组,使得该子数组的按位与的结果最大。返回该子数组的长度。
因为 a & b ≤ min { a , b } a\& b\le \min\{a,b\} a&b≤min{a,b},所以最大的按位与的结果一定发生在全等于 max A \max A maxA的子数组里,取最长的那个的长度即可。代码如下:
class Solution {
public:
int longestSubarray(vector<int>& a) {
int res = 0, max_v = -1;
for (int i = 0; i < a.size(); i++) {
int j = i;
while (j < a.size() && a[j] == a[i]) j++;
if (a[i] > max_v) {
max_v = a[i];
res = j - i;
} else if (a[i] == max_v)
res = max(res, j - i);
i = j - 1;
}
return res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。