LeetCode 0982. Triples with Bitwise AND Equal To Zero Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0982. Triples with Bitwise AND Equal To Zero

Description

Given an integer array nums, return the number of AND triples.

An AND triple is a triple of indices (i, j, k) such that:

  • 0 <= i < nums.length
  • 0 <= j < nums.length
  • 0 <= k < nums.length
  • nums[i] & nums[j] & nums[k] == 0, where & represents the bitwise-AND operator.

 

Example 1:

Input: nums = [2,1,3]
Output: 12
Explanation: We could choose the following i, j, k triples:
(i=0, j=0, k=1) : 2 & 2 & 1
(i=0, j=1, k=0) : 2 & 1 & 2
(i=0, j=1, k=1) : 2 & 1 & 1
(i=0, j=1, k=2) : 2 & 1 & 3
(i=0, j=2, k=1) : 2 & 3 & 1
(i=1, j=0, k=0) : 1 & 2 & 2
(i=1, j=0, k=1) : 1 & 2 & 1
(i=1, j=0, k=2) : 1 & 2 & 3
(i=1, j=1, k=0) : 1 & 1 & 2
(i=1, j=2, k=0) : 1 & 3 & 2
(i=2, j=0, k=1) : 3 & 2 & 1
(i=2, j=1, k=0) : 3 & 1 & 2

Example 2:

Input: nums = [0,0,0]
Output: 27

 

Constraints:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] < 216

Solutions

Solution 1: Enumeration + Counting

First, we enumerate any two numbers x and y, and use a hash table or array cnt to count the occurrences of their bitwise AND result x & y.

Then, we enumerate the bitwise AND result xy, and enumerate z. If xy & z = 0, then we add the value of cnt[xy] to the answer.

Finally, we return the answer.

The time complexity is O(n2 + n × M), and the space complexity is O(M), where n is the length of the array nums; and M is the maximum value in the array nums, with M ≤ 216 in this problem.

PythonJavaC++GoTypeScript
class Solution: def countTriplets(self, nums: List[int]) -> int: cnt = Counter(x & y for x in nums for y in nums) return sum(v for xy, v in cnt.items() for z in nums if xy & z == 0)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !