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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 2055. 蜡烛之间的盘子(前缀和)

發(fā)布時(shí)間:2024/7/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2055. 蜡烛之间的盘子(前缀和) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個(gè)長桌子,桌子上盤子和蠟燭排成一列。
給你一個(gè)下標(biāo)從 0 開始的字符串 s ,它只包含字符 '*' 和 '|' ,其中 '*' 表示一個(gè) 盤子 ,'|' 表示一支 蠟燭 。

同時(shí)給你一個(gè)下標(biāo)從 0 開始的二維整數(shù)數(shù)組 queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti...righti] (包含左右端點(diǎn)的字符)。
對(duì)于每個(gè)查詢,你需要找到 子字符串中 在 兩支蠟燭之間 的盤子的 數(shù)目 。
如果一個(gè)盤子在 子字符串中 左邊和右邊 都 至少有一支蠟燭,那么這個(gè)盤子滿足在 兩支蠟燭之間 。

比方說,s = "||**||**|*" ,查詢 [3, 8] ,表示的是子字符串 "*||**|" 。子字符串中在兩支蠟燭之間的盤子數(shù)目為 2 ,子字符串中右邊兩個(gè)盤子在它們左邊和右邊 都 至少有一支蠟燭。
請(qǐng)你返回一個(gè)整數(shù)數(shù)組 answer ,其中 answer[i] 是第 i 個(gè)查詢的答案。

示例 1:

輸入:s = "**|**|***|", queries = [[2,5],[5,9]] 輸出:[2,3] 解釋: - queries[0] 有兩個(gè)盤子在蠟燭之間。 - queries[1] 有三個(gè)盤子在蠟燭之間。

示例 2:

輸入:s = "***|**|*****|**||**|*", queries = [[1,17],[4,5],[14,17],[5,11],[15,16]] 輸出:[9,0,0,0,0] 解釋: - queries[0]9 個(gè)盤子在蠟燭之間。 - 另一個(gè)查詢沒有盤子在蠟燭之間。提示: 3 <= s.length <= 10^5 s 只包含字符 '*''|'1 <= queries.length <= 10^5 queries[i].length == 2 0 <= lefti <= righti < s.length

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/plates-between-candles
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 求出每個(gè)位置左側(cè)的最近的 | 的位置,同理右側(cè)的也是一樣
  • 然后找到區(qū)間左端點(diǎn)右側(cè)最近的 | 的位置,右端點(diǎn)左側(cè)最近的 | 的位置
  • 利用前綴和做差求解 * 的數(shù)量
class Solution { public:vector<int> platesBetweenCandles(string s, vector<vector<int>>& queries) {int n = s.size(), p = -1;vector<int> left(n, INT_MIN), right(n, INT_MAX);for(int i = 0; i < n; ++i){if(s[i] == '|')p = i;if(p != -1)left[i] = p;}p = -1;for(int i = n-1; i >= 0; --i){if(s[i] == '|')p = i;if(p != -1)right[i] = p;}vector<int> presum(n, 0); // 計(jì)算*的前綴數(shù)量presum[0] = s[0]=='*'? 1 : 0;for(int i = 1; i < n; ++i){if(s[i]=='*')presum[i] = presum[i-1]+1;elsepresum[i] = presum[i-1];}vector<int> ans(queries.size());for(int i = 0; i < queries.size(); ++i){int l = right[queries[i][0]];int r = left[queries[i][1]];if(l < r)ans[i] = presum[r]-presum[l]; }return ans;} };

356 ms 138.7 MB C++ 2021/11/06 10:25


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

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

總結(jié)

以上是生活随笔為你收集整理的LeetCode 2055. 蜡烛之间的盘子(前缀和)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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