給你一個長度為?n
?的整數數組?nums
?。
考慮?nums
?中進行?按位與(bitwise AND)運算得到的值?最大?的?非空?子數組。
- 換句話說,令?
k
?是?nums
?任意?子數組執行按位與運算所能得到的最大值。那么,只需要考慮那些執行一次按位與運算后等于?k
?的子數組。
返回滿足要求的?最長?子數組的長度。
數組的按位與就是對數組中的所有數字進行按位與運算。
子數組?是數組中的一個連續元素序列。
示例 1:
輸入:nums = [1,2,3,3,2,2] 輸出:2 解釋: 子數組按位與運算的最大值是 3 。 能得到此結果的最長子數組是 [3,3],所以返回 2 。
示例 2:
輸入:nums = [1,2,3,4] 輸出:1 解釋: 子數組按位與運算的最大值是 4 。 能得到此結果的最長子數組是 [4],所以返回 1 。
提示:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6
分析:由于兩個數按位與之后的結果只可能小于等于其中的任意一個數,因此按位與的最大值一定是數組中連續的最大值的個數。
int longestSubarray(int* nums, int numsSize) {int maxval=nums[0],len=0;for(int i=1;i<numsSize;++i)if(maxval<nums[i])maxval=nums[i];int temp=0;for(int i=0;i<numsSize;++i){if(nums[i]==maxval)temp++;else len=fmax(len,temp),temp=0;}len=fmax(len,temp);return len;
}