2419.按位与最大的最长子数组
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;}
};