前往
大廳
主題

LeetCode - 2044. Count Number of Maximum Bitwise-OR Subsets 解題心得

Not In My Back Yard | 2022-04-05 00:00:07 | 巴幣 200 | 人氣 239

題目連結:


題目意譯:
給定一個整數陣列 nums,找出最大可能的 nums 之子集合按位元(Bitwise)OR 值,並回傳有多少不同的非空子集合有著最大的按位元 OR 值。

一陣列 a 為一陣列 b 的子集合如果 a 可以藉由從 b 之中刪除若干個(可能沒有)元素。兩子集合視為不同,如果被選擇的元素之索引值有所不同。

一陣列 a 按位元 OR 之值為 a[0] OR a[1] OR …… OR a[a.length - 1](索引值從 0 開始數)。

限制:
1 ≦ nums.length ≦ 16
1 ≦ nums[i] ≦ 10 ^ 5



範例測資:
範例 1:
輸入: nums = [3,1]
輸出: 2
解釋: 一個子集合最大可能的按位元 OR 之值為 3。有 2 個子集合有著按位元 OR 值為 3:
- [3]
- [3,1]

範例 2:
輸入: nums = [2,2,2]
輸出: 7
解釋: 所有 [2,2,2] 的非空子集合都有著按位元 OR 值 2。總計有 2 ^ 3 - 1 = 7 個子集合。

範例 3:
輸入: nums = [3,2,1,5]
輸出: 6
解釋: 一個子集合最大可能的按位元 OR 之值為 7。有 6 個子集合有著按位元 OR 值為 7:
- [3,5]
- [3,1,5]
- [3,2,5]
- [3,2,1,5]
- [2,5]
- [2,1,5]


解題思維:
就是單純地窮舉出所有可能的子集合並計算它們的按位元 OR 之值即可,並利用兩個變數 M 、 C 分別用來計算當前 OR 之最大值以及有多少子集合的 OR 值恰好等於當前最大值。

窮舉完之後的 C 之值即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作