(2.26 “详细分析示例“ 暴力+位运算 最长优雅子数组)leetcode 2401
a&b=0说明a和b的每一位都是一个0和一个1 不存在两个均为1的位次
a|0=a 0与任何数|都等于它本身
(mask)的作用:
担心两数的1在用一位导致mask覆盖了?
答:出现这种情况说明mask与nums j后就直接break
由:最长的优雅子数组长度为 1 ,任何长度为 1 的子数组都满足题目条件。
答:ans初始值为1;
class Solution {
public:
int longestNiceSubarray(vector<int>& nums) {
int ans=1;
int n=nums.size();
int mask=0;
for(int i=0;i<n;i++)
{ mask=0;
for(int j=i;j<n;j++)
{
if(mask&nums[j])
break;
mask|=nums[j];
ans=max(ans,j-i+1);
}
}
return ans;
}
};