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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天池 在线编程 区间统计(队列)

發布時間:2024/7/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天池 在线编程 区间统计(队列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給定一個01數組 arr 和 一個整數 k, 統計有多少區間符合如下條件:

  • 區間的兩個端點都為 0 (允許區間長度為1)
  • 區間內 1 的個數不多于 k

arr 的大小不超過 10^5

樣例 1: 輸入: arr = [0, 0, 1, 0, 1, 1, 0], k = 1 輸出: 7 解釋: [0, 0], [1, 1], [3, 3], [6, 6], [0, 1], [0, 3], [1, 3] (區間 [i,j] 表示下標 i(包括)和下標 j(包括)之間的元素)樣例 2: 輸入: arr = [1, 1, 1, 0, 0, 1], k = 2 輸出: 3 解釋: [3, 3], [4, 4], [3, 4] (區間 [i,j] 表示下標 i(包括)和下標 j(包括)之間的元素)

https://tianchi.aliyun.com/oj/286606814880453210/327250187142763356

2. 解題

  • 使用隊列記錄隊列內的 和 s, 維護 s <= k
class Solution { public:/*** @param arr: the 01 array* @param k: the limit * @return: the sum of the interval*/long long intervalStatistics(vector<int> &arr, int k) {// Write your code here.queue<int> q;int s = 0;long long ans = 0;for(int i = 0; i < arr.size(); ++i){q.push(i);if(arr[i])s++;else//等于0,以該0為右端點的區間{while(s > k || arr[q.front()]==1)//直到 s <= k 且 左端出現 0{if(arr[q.front()]==1)s--;q.pop();}ans += i-q.front()+1 - s;//區間的長度 減去 和 s 就是零的個數}}return ans;} };

50ms C++


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

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的天池 在线编程 区间统计(队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。