Problem: 2419. 按位與最大的最長子數組
思路
子數組按位與的結果,不會超過子數組里的最大值(因為 a & b ≤ max(a, b))。 進一步推導,整個數組最大按位與的結果就是數組本身的最大值。 因為最大的那個元素自己作為子數組時,按位與結果就是它自己,其他子數組的按位與結果不可能超過它 。
解題過程
- 找到數組的最大值 max_and(這是 “按位與結果最大” 的目標值 )。
- 找到連續等于 max_and 的最長子數組長度(因為只有這些子數組的按位與結果會等于 max_and,其他子數組的按位與結果必然更小 )。
復雜度
- 時間復雜度: O(n)
- 空間復雜度: O(1)
class Solution {
public:int longestSubarray(vector<int>& nums) {int maxval = *max_element(nums.begin(), nums.end());int ans = 0;int cur_len = 0;for (int i = 0; i < nums.size(); i++) {if (nums[i] == maxval) {cur_len++;ans = max(ans, cur_len);} else {cur_len = 0;}}return ans;}
};