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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分)

發布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個二維整數數組 ranges 和兩個整數 left 和 right 。每個 ranges[i] = [starti, endi] 表示一個從 starti 到 endi 的 閉區間 。

如果閉區間 [left, right] 內每個整數都被 ranges 中 至少一個 區間覆蓋,那么請你返回 true ,否則返回 false 。

已知區間 ranges[i] = [starti, endi] ,如果整數 x 滿足 starti <= x <= endi ,那么我們稱整數 x 被覆蓋了。

示例 1: 輸入:ranges = [[1,2],[3,4],[5,6]], left = 2, right = 5 輸出:true 解釋:25 的每個整數都被覆蓋了: - 2 被第一個區間覆蓋。 - 34 被第二個區間覆蓋。 - 5 被第三個區間覆蓋。示例 2: 輸入:ranges = [[1,10],[10,20]], left = 21, right = 21 輸出:false 解釋:21 沒有被任何一個區間覆蓋。提示: 1 <= ranges.length <= 50 1 <= starti <= endi <= 50 1 <= left <= right <= 50

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/check-if-all-the-integers-in-a-range-are-covered
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 把每個滿足 [left, right] 的數插入到 set 中,檢查 set 的大小
class Solution { public:bool isCovered(vector<vector<int>>& ranges, int left, int right) {unordered_set<int> s;for(auto& r : ranges){int a = r[0], b = r[1];for(int i = max(a, left); i <= min(b, right); ++i)s.insert(i);}return s.size() == right-left+1;} };

4 ms 8.7 MB C++

以上的時間復雜度在數據范圍很大的時候,效率很低

  • 可以采用差分的方法,參考官方題解
    類似題目:LeetCode 1109. 航班預訂統計(差分思想)
class Solution { public:bool isCovered(vector<vector<int>>& ranges, int left, int right) {vector<int> ct(52, 0);for(auto& r : ranges){ct[r[0]]++;ct[r[1]+1]--;}int s = 0;for(int i = 0; i <= right; ++i){s += ct[i];if(i >= left && s == 0)return false;}return true;} };

4 ms 8.7 MB C++


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

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

總結

以上是生活随笔為你收集整理的LeetCode 1893. 检查是否区域内所有整数都被覆盖(差分)的全部內容,希望文章能夠幫你解決所遇到的問題。

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