Longest Subarray With Maximum Bitwise AND
Longest Subarray With Maximum Bitwise AND
You are given an integer array nums of size .
Consider a non-empty subarray from nums that has the maximum possible bitwise AND.
- In other words, let be the maximum value of the bitwise AND of any subarray of nums . Then, only subarrays with a bitwise AND equal to k should be considered.
Return the length of the longest such subarray.
The bitwise AND of an array is the bitwise AND of all the numbers in it.
A subarray is a contiguous sequence of elements within an array.
Example 1:
Input: nums = [1,2,3,3,2,2] Output: 2 Explanation: The maximum possible bitwise AND of a subarray is 3. The longest subarray with that value is [3,3], so we return 2.
Example 2:
Input: nums = [1,2,3,4] Output: 1 Explanation: The maximum possible bitwise AND of a subarray is 4. The longest subarray with that value is [4], so we return 1.
Constraints:
解题思路
比赛的时候还真没想出来怎么做,过了很久才想出来做法,主要是忽略了按位与得到的结果不会变大这个性质。
一定满足并且。考虑每一位,如果按位与的两位都是,那么得到的结果是;如果按位与的两位存在一位是,那么得到的结果是。因此可以发现对于每一位,当进行一次与运算后结果不会变大只有可能变小。
因此取单个数一定可以得到最大值。先枚举出整个数组的最大值,因为越与越小,因此如果想要结果是这个最大值,那么这个区间的每一个数都要是这个最大值才可以。因此问题就变成了找到一个长度最长的区间,且区间中所有值都是最大值。
AC代码如下:
1 class Solution { 2 public: 3 int longestSubarray(vector<int>& nums) { 4 int maxv = *max_element(nums.begin(), nums.end()); 5 int ret = 0; 6 for (int i = 0; i < nums.size(); i++) { 7 int t = i; 8 while (t < nums.size() && nums[t] == maxv) { 9 t++; 10 } 11 ret = max(ret, t - i); 12 i = t; 13 } 14 return ret; 15 } 16 };
参考资料
力扣第312场周赛:https://www.bilibili.com/video/BV13Y4y1K7eU
本文来自博客园,作者:onlyblues,转载请注明原文链接:https://www.cnblogs.com/onlyblues/p/16728006.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效