# LC 2401. Longest Nice Subarray ### [Problem link](https://leetcode.com/problems/longest-nice-subarray/) ###### tags: `leedcode` `medium` `c++` `Sliding Window` You are given an array <code>nums</code> consisting of **positive** integers. We call a subarray of <code>nums</code> **nice** if the bitwise **AND** of every pair of elements that are in **different** positions in the subarray is equal to <code>0</code>. Return the length of the **longest** nice subarray. A **subarray** is a **contiguous** part of an array. **Note** that subarrays of length <code>1</code> are always considered nice. **Example 1:** ``` Input: nums = [1,3,8,48,10] Output: 3 Explanation: The longest nice subarray is [3,8,48]. This subarray satisfies the conditions: - 3 AND 8 = 0. - 3 AND 48 = 0. - 8 AND 48 = 0. It can be proven that no longer nice subarray can be obtained, so we return 3. ``` **Example 2:** ``` Input: nums = [3,1,5,11,13] Output: 1 Explanation: The length of the longest nice subarray is 1. Any subarray of length 1 can be chosen. ``` **Constraints:** - <code>1 <= nums.length <= 10<sup>5</sup></code> - <code>1 <= nums[i] <= 10<sup>9</sup></code> ## Solution 1 - Sliding Window #### C++ ```cpp= class Solution { public: int longestNiceSubarray(vector<int>& nums) { int cnt = 0; int ans = 0; int l = 0; for (int r = 0; r < nums.size(); r++) { while ((nums[r] & cnt) > 0) { cnt ^= nums[l]; l++; } cnt |= nums[r]; ans = max(ans, r - l + 1); } return ans; } }; ``` >### Complexity >| | Time Complexity | Space Complexity | >| ----------- | --------------- | ---------------- | >| Solution 1 | O(n) | O(1) | ## Note x