LeetCode 898. 子数组按位或操作(前缀和思想)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 898. 子数组按位或操作(前缀和思想)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 超時(shí)解
- 2.2 正解
1. 題目
我們有一個(gè)非負(fù)整數(shù)數(shù)組 A。
對(duì)于每個(gè)(連續(xù)的)子數(shù)組 B = [A[i], A[i+1], ..., A[j]] ( i <= j),我們對(duì) B 中的每個(gè)元素進(jìn)行按位或操作,獲得結(jié)果 A[i] | A[i+1] | ... | A[j]。
返回可能結(jié)果的數(shù)量。 (多次出現(xiàn)的結(jié)果在最終答案中僅計(jì)算一次。)
示例 1: 輸入:[0] 輸出:1 解釋: 只有一個(gè)可能的結(jié)果 0 。示例 2: 輸入:[1,1,2] 輸出:3 解釋: 可能的子數(shù)組為 [1],[1],[2],[1, 1],[1, 2],[1, 1, 2]。 產(chǎn)生的結(jié)果為 1,1,2,1,3,3 。 有三個(gè)唯一值,所以答案是 3 。示例 3: 輸入:[1,2,4] 輸出:6 解釋: 可能的結(jié)果是 1,2,3,4,6,以及 7 。提示: 1 <= A.length <= 50000 0 <= A[i] <= 10^9來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/bitwise-ors-of-subarrays
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
2.1 超時(shí)解
class Solution { // 超時(shí) public:int subarrayBitwiseORs(vector<int>& arr) {int n = arr.size();unordered_set<int> a, b, ans;for(int i = 0; i < n; ++i){b.clear();b.insert(arr[i]);for(auto it = a.begin(); it != a.end(); ++it){b.insert(*it|arr[i]);}a.swap(b);for(auto i : a)ans.insert(i);}return ans.size();} };2.2 正解
- 上面解法忽略了一個(gè)條件,| 操作 數(shù)字不會(huì)減小,當(dāng) 區(qū)間 [j, i] | 操作的結(jié)果 == [j, i-1] 的結(jié)果,那么 [j-1, i],[j-2, i]等往前的都不需要計(jì)算了,都是一樣的結(jié)果,A[i] 的貢獻(xiàn) 被 區(qū)間 [j, i-1] 掩蓋了
1008 ms 95.7 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 898. 子数组按位或操作(前缀和思想)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 第 36 场双周赛(3
- 下一篇: sklearn 机器学习 Pipelin