日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 898. 子数组按位或操作(前缀和思想)

發(fā)布時(shí)間:2024/7/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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é)果為 112133 。 有三個(gè)唯一值,所以答案是 3 。示例 3: 輸入:[1,2,4] 輸出:6 解釋: 可能的結(jié)果是 12346,以及 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] 掩蓋了
class Solution { public:int subarrayBitwiseORs(vector<int>& arr) {int n = arr.size();unordered_set<int> ans;for(int i = 0; i < n; ++i)//以 i 為右端點(diǎn){ans.insert(arr[i]);for(int j = i-1; j >= 0; --j) // j 為左端點(diǎn){if((arr[j]|arr[i])==arr[j])break;//arr[j] 存儲(chǔ)的是 [j, i-1] 的區(qū)間 | 和arr[j] |= arr[i]; //現(xiàn)在 arr[j] 存儲(chǔ)的是 [j, i] 的區(qū)間 | 和ans.insert(arr[j]);}}return ans.size();} };

1008 ms 95.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的LeetCode 898. 子数组按位或操作(前缀和思想)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。