LeetCode 900. RLE 迭代器(模拟/二分查找)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 900. RLE 迭代器(模拟/二分查找)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 直接模擬
- 2.2 二分查找
1. 題目
編寫一個遍歷游程編碼序列的迭代器。
迭代器由 RLEIterator(int[] A) 初始化,其中 A 是某個序列的游程編碼。
更具體地,對于所有偶數 i,A[i] 告訴我們在序列中重復非負整數值 A[i + 1] 的次數。
迭代器支持一個函數:next(int n),它耗盡接下來的 n 個元素(n >= 1)并返回以這種方式耗去的最后一個元素。
如果沒有剩余的元素可供耗盡,則 next 返回 -1 。
例如,我們以 A = [3,8,0,9,2,5] 開始,這是序列 [8,8,8,5,5] 的游程編碼。
這是因為該序列可以讀作 “三個八,零個九,兩個五”。
來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/rle-iterator
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
2.1 直接模擬
class RLEIterator {vector<int> arr;vector<int> count;int idx = 0;int val; public:RLEIterator(vector<int>& A) {int n = A.size();arr.resize(n/2);count.resize(n/2);for(int i = 1; i < A.size(); i += 2){count[i/2] = A[i-1];//每個數字的個數arr[i/2] = A[i];//數字}}int next(int n) {val = -1;while(idx < count.size() && n > 0){if(count[idx] > n)//個數多{count[idx] -= n;//當前數字個數減去nreturn arr[idx];}else//個數不夠 或者 剛好{n -= count[idx];//還差幾個 n if(n == 0)val = arr[idx];idx++;//移動到下一個數}}return val;} };12 ms 8.2 MB
2.2 二分查找
- 記錄前綴和個數(非減序列),二分查找歷史第多少個(n也全部加起來)
16 ms 8.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 900. RLE 迭代器(模拟/二分查找)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 02.改善深层神经网络:超参数调试、正则
- 下一篇: LeetCode 552. 学生出勤记录