題目連結:
題目意譯:
給定一個整數陣列 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 之值即為所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。