5186. 區間內查詢數字的頻率

5186. 區間內查詢數字的頻率

請你設計一個數據結構,它能求出給定子數組內一個給定值的 頻率 。

子數組中一個值的 頻率 指的是這個子數組中這個值的出現次數。

請你實現 RangeFreqQuery 類:

RangeFreqQuery(int[] arr) 用下標從 0 開始的整數數組 arr 構造一個類的實例。
int query(int left, int right, int value) 返回子數組 arr[left…right] 中 value 的 頻率 。
一個 子數組 指的是數組中一段連續的元素。arr[left…right] 指的是 nums 中包含下標 left 和 right 在內 的中間一段連續元素。

示例 1:輸入:
["RangeFreqQuery", "query", "query"]
[[[12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56]], [1, 2, 4], [0, 11, 33]]
輸出:
[null, 1, 2]解釋:
RangeFreqQuery rangeFreqQuery = new RangeFreqQuery([12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56]);
rangeFreqQuery.query(1, 2, 4); // 返回 1 。4 在子數組 [33, 4] 中出現 1 次。
rangeFreqQuery.query(0, 11, 33); // 返回 2 。33 在整個子數組中出現 2 次。

提示:

  • 1 <= arr.length <= 10510^5105
  • 1 <= arr[i], value <= 10410^4104
  • 0 <= left <= right < arr.length
  • 調用 query 不超過 $10^5 $次。

解題思路

使用map維護某個值在數組中曾經出現的下標,key為數組中的元素,value為一個數組,記錄下對于key值在數組中曾經出現的下標,在構建map的時候,我們按下標從小到大,就可以保證value內的下標是有序的。

當我們需要返回子數組 arr[left…right] 中 value 的 頻率 的時候,我們只需要在map中找到value出現的下標數組,通過二分查找,找出第一個大于或者等于left的下標l,以及找出第一個大于right的下標r,而位于這兩個下標之間的元素即為子數組 arr[left…right] 中 出現過的value,只需要通過r-l求出區間的長度,即求出了對應value出現的頻率。

代碼

class RangeFreqQuery {
private:unordered_map<int, vector<int>> m;
public:RangeFreqQuery(vector<int> &arr) {for (int i = 0; i < arr.size(); ++i) {m[arr[i]].push_back(i);}}int query(int left, int right, int value) {if (m[value].size() == 0) return 0;auto &cur = m[value];auto l = lower_bound(cur.begin(), cur.end(), left), r = upper_bound(cur.begin(), cur.end(), right);return r - l;}
};/*** Your RangeFreqQuery object will be instantiated and called as such:* RangeFreqQuery* obj = new RangeFreqQuery(arr);* int param_1 = obj->query(left,right,value);*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389695.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NIO 學習筆記

0. 介紹 參考 關于Java IO與NIO知識都在這里 &#xff0c;在其基礎上進行修改與補充。 1. NIO介紹 1.1 NIO 是什么 Java NIO 是 java 1.4, 之后新出的一套IO接口. NIO中的N可以理解為Non-blocking&#xff0c;不單純是New。 1.2 NIO的特性/NIO與IO區別 IO是面向流的&#x…

[原創]java獲取word里面的文本

需求場景 開發的web辦公系統如果需要處理大量的Word文檔&#xff08;比如有成千上萬個文檔&#xff09;&#xff0c;用戶一定提出查找包含某些關鍵字的文檔的需求&#xff0c;這就要求能夠讀取 word 中的文字內容&#xff0c;而忽略其中的文字樣式、表格、圖片等信息。 方案分析…

ab 模擬_Ab測試第二部分的直觀模擬

ab 模擬In this post, I would like to invite you to continue our intuitive exploration of A/B testing, as seen in the previous post:在本文中&#xff0c;我想邀請您繼續我們對A / B測試的直觀探索&#xff0c;如前一篇文章所示&#xff1a; Resuming what we saw, we…

1886. 判斷矩陣經輪轉后是否一致

1886. 判斷矩陣經輪轉后是否一致 給你兩個大小為 n x n 的二進制矩陣 mat 和 target 。現 以 90 度順時針輪轉 矩陣 mat 中的元素 若干次 &#xff0c;如果能夠使 mat 與 target 一致&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1&#xff1a; 輸…

samba登陸密碼不正確

win7訪問Linux Samba的共享目錄提示“登錄失敗&#xff1a;用戶名或密碼錯誤”解決方法 解決辦法&#xff1a;修改本地安全策略 通過Samba服務可以實現UNIX/Linux主機與Windows主機之間的資源互訪&#xff0c;由于實驗需要&#xff0c;輕車熟路的在linux下配置了samba服務&…

Java構造函數的深入理解

我們人出生的時候&#xff0c;有些人一出生之后再起名字的&#xff0c;但是有些人一旦出生就已經起好名字的。那么我們在 java 里面怎么在對象一旦創建就賦值呢&#xff1f; public class Person {String name; // 姓名int age; // 年齡public static void main(String[]…

1967. 作為子字符串出現在單詞中的字符串數目

1967. 作為子字符串出現在單詞中的字符串數目 給你一個字符串數組 patterns 和一個字符串 word &#xff0c;統計 patterns 中有多少個字符串是 word 的子字符串。返回字符串數目。 子字符串 是字符串中的一個連續字符序列。 示例 1&#xff1a;輸入&#xff1a;patterns [&…

判斷IE版本與各瀏覽器的語句

---恢復內容開始--- 一.IE下判斷IE版本的語句 <!--[if lte IE 6]><![endif]-->IE6及其以下版本可見<!--[if lte IE 7]><![endif]-->IE7及其以下版本可見<!--[if IE 6]><![endif]-->只有IE6版本可見<![if !IE]><![endif]>除了I…

各類軟件馬斯洛需求層次分析_需求的分析層次

各類軟件馬斯洛需求層次分析When I joined Square, I was embedded on a product that had been in-market for a year but didn’t have dedicated analytics support.當我加入Square時&#xff0c;我被嵌入了已經上市一年但沒有專門的分析支持的產品。 As you might expect,…

384. 打亂數組

384. 打亂數組 給你一個整數數組 nums &#xff0c;設計算法來打亂一個沒有重復元素的數組。 實現 Solution class: Solution(int[] nums) 使用整數數組 nums 初始化對象int[] reset() 重設數組到它的初始狀態并返回int[] shuffle() 返回數組隨機打亂后的結果 示例&#xf…

HTTP/2 學習筆記

創建連接TCP三次握手:包括客戶端想服務端發起一個SYN包,接著服務端返回對應SYN的ACK響應以及新的SYN包,然后客戶端返回對應的ACK.如果客戶端發起HTTPS連接,它還需要進行傳輸層安全協議(TLS)協商;TLS用來取代安全套接層.HTTP1的問題1.隊頭阻塞:允許一次發送一組請求,但是只能按照…

MySQL的變量分類總結

在MySQL中&#xff0c;my.cnf是參數文件&#xff08;Option Files&#xff09;&#xff0c;類似于ORACLE數據庫中的spfile、pfile參數文件&#xff0c;照理說&#xff0c;參數文件my.cnf中的都是系統參數&#xff08;這種稱呼比較符合思維習慣&#xff09;&#xff0c;但是官方…

859. 親密字符串

859. 親密字符串 給你兩個字符串 s 和 goal &#xff0c;只要我們可以通過交換 s 中的兩個字母得到與 goal 相等的結果&#xff0c;就返回 true &#xff1b;否則返回 false 。 交換字母的定義是&#xff1a;取兩個下標 i 和 j &#xff08;下標從 0 開始&#xff09;且滿足 …

python函數不同類型參數順序

python函數的參數定義順序必須為&#xff1a; 必須參數&#xff08;位置參數&#xff09;&#xff0c;默認參數&#xff0c;可變參數&#xff0c;命名關鍵字參數&#xff0c;關鍵字參數 如以下定義&#xff1a; def f1(a, b, c0, *args, d, **kw): print(a , a, b , b, c , c, …

亞洲國家互聯網滲透率_發展中亞洲國家如何回應covid 19

亞洲國家互聯網滲透率The COVID-19 pandemic has severely hit various economies across the world, with global impact estimated between USD 6.1 trillion and USD 9.1 trillion, equivalent to a loss of 7.1% to 10.5% of global gross domestic product (GDP).[1] More…

create-react-app項目使用假數據

做新項目的時候&#xff0c;前端每次要等后端接口準備好再開始&#xff0c;就會延期&#xff0c;等后端接口準備好了&#xff0c;前端這邊的項目又會相互緊張&#xff0c;如果前端跟后端同時進行&#xff0c;前期將框架&#xff0c;基礎做好&#xff0c;定好接口文檔&#xff0…

1854. 人口最多的年份

1854. 人口最多的年份 給你一個二維整數數組 logs &#xff0c;其中每個 logs[i] [birthi, deathi] 表示第 i 個人的出生和死亡年份。 年份 x 的 人口 定義為這一年期間活著的人的數目。第 i 個人被計入年份 x 的人口需要滿足&#xff1a;x 在閉區間 [birthi, deathi - 1] 內…

snake4444勒索病毒成功處理教程方法工具達康解密金蝶/用友數據庫sql后綴snake4444...

*snake4444勒索病毒成功處理教程方法 案例&#xff1a;筆者負責一個政務系統的第三方公司的運維&#xff0c;上班后發現服務器的所有文件都打不開了&#xff0c;而且每個文件后面都有一個snake4444的后綴&#xff0c;通過網絡我了解到這是一種勒索病毒。因為各個文件不能正常打…

有史以來最漂亮的游戲機

The recent reveal of the PlayStation 5’s design has divided the gaming world. There are those who appreciate its bold, daring industrial design and those who would have preferred something a little less outlandish; perhaps a little more traditional.噸 他最…

springboot-添加攔截器

在我們日常開發的過程中&#xff0c;經常會遇到這一類問題&#xff0c;要求需要用戶登錄以后才能夠訪問其他的內容&#xff0c;否則不行&#xff0c;那么解決這一問題最好的辦法就是運用攔截器&#xff0c;攔截器可以和多種處理請求的web框架結合&#xff0c;今天所講的就是與s…