2401. 最长优雅子数组
当新来的数与当前窗口里面的数按位与都不为0,则缩小窗口里面的数,直到当前的数与窗口里面的数按位与都为0,则窗口内加上这个数(按位或),同时更新数组元素的个数。
代码:
class Solution {
public:
int longestNiceSubarray(vector<int>& nums) {
int n=nums.size();
if(n==1) return 1;
int i=0,j=i+1;
int ans=1;
int now=nums[i];
while(i<n&&j<n)
{
while(i<j&&(now&nums[j])!=0) //按位与不为0
{
now-=nums[i]; //移除当前的数
++i;
}
now|=nums[j]; //为0加上当前的数 按位或
ans=max(ans,j-i+1);
++j;
}
return ans;
}
};