邊工作邊刷題:70天一遍leetcode: day 97-2

Design Hit Counter

要點:因為是second granularity,所以可以用以秒為單位的circular buffer方法。這題簡單在只需要count過去300秒的,增加難度可以count過去秒,分鐘,小時。

  • 2個時間點都有可能更新超時的統計:query和hit
  • 一種簡單方法是分開計timestamp和hit:每次timestamp%300的slot里的ts和當前時間比較:因為可以用記錄的ts來區分當前slot是否過期,query可以不更新只統計。同樣,hit只要更新當前slot:+1(有效)or 1(過期)
  • 如果不記錄timestamp,需要記錄lastSec(實際就是上次隊頭):而這次curSec更新為新head
    • why [lastSec+1, curSec] is cleaned up? 因為curSec是新的circular buffer的隊頭,根據題意,隊列的head和tail是相連的(or tail是head的下一個)。新的head更新前就把上一次隊尾開始的元素清空(也就是超時的部分)
    • 擴展:lastMiniute的更新?[lastSec-60+1, curSec-60]:在這兩個時間之間要清除:無論curSec和lastSec差>60 or <60:之前lastSec和curSec之間已經清零(注意更新minute要在seconds清零之后),所以實際減去的只是lastSec-60開始到curSec-60沒清零的部分,保留的是curSec-60+1之后這部分:注意curSec-60+1是過去1分鐘的最后一秒
    • 特殊情況:curSec-lastSec>300:不用一個個清零了。curSec==lastSec情況不用特殊考慮,因為是從lastSec+1開始清零
    • 本題count更新和擴展中的hour更新一個意思

https://repl.it/C9qu/3

# Design a hit counter which counts the number of hits received in the past 5 minutes.# Each function accepts a timestamp parameter (in seconds granularity) and you may assume that calls are being made to the system in chronological order (ie, the timestamp is monotonically increasing). You may assume that the earliest timestamp starts at 1.# It is possible that several hits arrive roughly at the same time.# Example:
# HitCounter counter = new HitCounter();# // hit at timestamp 1.
# counter.hit(1);# // hit at timestamp 2.
# counter.hit(2);# // hit at timestamp 3.
# counter.hit(3);# // get hits at timestamp 4, should return 3.
# counter.getHits(4);# // hit at timestamp 300.
# counter.hit(300);# // get hits at timestamp 300, should return 4.
# counter.getHits(300);# // get hits at timestamp 301, should return 3.
# counter.getHits(301); 
# Follow up:
# What if the number of hits per second could be very large? Does your design scale?class HitCounter(object):def __init__(self):"""Initialize your data structure here."""self.lastSec = 0self.seconds = [0]*300self.count = 0def _cleanup(self, timestamp):if timestamp-self.lastSec>300:self.seconds = [0]*300self.count = 0else:for i in xrange(self.lastSec+1, timestamp+1):self.count-=self.seconds[i%300]self.seconds[i%300]=0def hit(self, timestamp):"""Record a hit.@param timestamp - The current timestamp (in seconds granularity).:type timestamp: int:rtype: void"""self._cleanup(timestamp)self.count+=1        self.seconds[timestamp%300]+=1self.lastSec = timestampdef getHits(self, timestamp):"""Return the number of hits in the past 5 minutes.@param timestamp - The current timestamp (in seconds granularity).:type timestamp: int:rtype: int"""self._cleanup(timestamp)self.lastSec = timestampreturn self.count# Your HitCounter object will be instantiated and called as such:
# obj = HitCounter()
# obj.hit(timestamp)
# param_2 = obj.getHits(timestamp)

轉載于:https://www.cnblogs.com/absolute/p/5815929.html

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

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

相關文章

cvRemap 對圖像進行普通幾何變換

cvRemap 對圖像進行普通幾何變換 函數 cvRemap 利用下面指定的矩陣變換輸入圖像:   dst(x,y)<-src(mapx(x,y),mapy(x,y))   與其它幾何變換類似&#xff0c;可以使用一些插值方法&#xff08;由用戶指定&#xff0c;同cvResize&#xff09;來計算非整數坐標的像素值 vo…

disconf(二):服務端使用總結

1、服務端原理客戶端啟動&#xff0c;把配置文件&#xff0c;配置項存到倉庫&#xff0c;等到服務端啟動&#xff0c;從服務端拉取數據&#xff1b;服務端更新&#xff0c;則通過zk通知客戶端&#xff0c;客戶端知道更新后&#xff0c;會從服務端拉取最新的配置文件&#xff0c…

B2C和B2B之間有多大差距

從產品應用的角度&#xff0c;我們團隊經歷了企圖將B2C系統套用到B2B業務流程上的階段&#xff0c;對于自營業務這還勉強可以實施&#xff0c;但對于外部用戶的實施難度就太大了&#xff0c;用戶體驗也不好。這個過程中&#xff0c;我只關注了技術范疇的迭代速度、而忽略了用戶…

h.264 視頻解碼的一點小經驗(ffmpeg)

最近做視頻文件264解碼&#xff0c;由于對這個領域不是很熟悉&#xff0c;感覺困難重重。不過經過不懈的努力&#xff0c;已經取得一些進展&#xff0c;心里感覺特別慶幸。 剛開始做這個的時候&#xff0c;由于不熟悉&#xff0c;就在網上搜尋資料&#xff0c;網絡上的資料雖然…

HALCON示例程序novelty_detection_dyn_threshold.hdev紗網缺陷檢測

HALCON示例程序novelty_detection_dyn_threshold.hdev紗網缺陷檢測 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_window (‘off’) read_image (Image, ‘plastic_mesh/plastic_mesh_01’) dev_close_window () get_image_size (Image, Width…

配置云服務器 FTP 服務

自己配置的環境: OS: 阿里云 CentOS 6.5 >>Begin: 1. 登錄到阿里云服務器(如何登錄阿里云服務器), 在root權限下, 通過如下命令安裝 vsftp [rootVM_250_202_tlinux ~]# yum install vsftpd 2. 在啟動vsftpd服務之前&#xff0c;需要登錄云服務器修改配置文件&#xff0c;…

【躍遷之路】【428天】程序員高效學習方法論探索系列(實驗階段185-2018.04.09)...

(躍遷之路)專欄 實驗說明 從2017.10.6起&#xff0c;開啟這個系列&#xff0c;目標只有一個&#xff1a;探索新的學習方法&#xff0c;實現躍遷式成長實驗期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我將以自己為實驗對象。我將開源我的學習方法&#xff0c;方法不斷…

opencv中的一些陷阱 坑死我了~~~~(_)~~~~

1.這幾天被opencv給坑的夠慘&#xff0c;好好的程序&#xff0c;先是因為imread&#xff08;&#xff09;不能讀文件&#xff0c;整了很久沒整出來&#xff0c;然后改了下path路徑&#xff0c;沒想到后面徹底奔潰了&#xff0c;&#xff0c;&#xff0c;&#xff0c;前后大概2天…

一篇需要膜拜的文篇--Javascript異步編程模型進化(轉)

要我能用得這么熟&#xff0c; 那前端出師了哈。 http://foio.github.io/javascript-asyn-pattern/ 改天一個一個親測一下。 Javascript語言是單線程的&#xff0c;沒有復雜的同步互斥&#xff1b;但是&#xff0c;這并沒有限制它的使用范圍&#xff1b;相反&#xff0c;借助于…

很強大的FFMPEG API Documentation

http://wiki.aasimon.org/doku.php?idffmpeg:ffmpeg 點擊打開鏈接

HALCON示例程序obj_diff.hdev算子obj_diff 的使用

HALCON示例程序obj_diff.hdev算子obj_diff 的使用 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 read_image (Image, ‘particle’)二值化 threshold (Image, Region, 57, 255)分割連通域 connection (Region, ConnectedRegions) dev_close_window () get…

JS函數方法Call Apply Bind運用

JS 函數非繼承的call和apply方法 同&#xff1a;call & apply 主要是用于擴展this指向&#xff0c;降低this作用域與函數之間的耦合度&#xff1b; 區別&#xff1a;傳參差異 function.call(this/object,params1,params2,...) 第一個參數為作用域指向參數&#xff0c;后邊參…

IplImage, CvMat, Mat 的關系和相互轉換 再次理解 /(ㄒoㄒ)/~~

opencv中常見的與圖像操作有關的數據容器有Mat&#xff0c;cvMat和IplImage&#xff0c;這三種類型都可以代表和顯示圖像&#xff0c;但是&#xff0c;Mat類型側重于計算&#xff0c;數學性較高&#xff0c;openCV對Mat類型的計算也進行了優化。而CvMat和IplImage類型更側重于“…

HALCON示例程序optical_flow.hdev如何使用optical_flow_mg計算圖像序列中的光流以及如何分割光流。

HALCON示例程序optical_flow.hdev如何使用optical_flow_mg計算圖像序列中的光流以及如何分割光流。 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () dev_close_window () read_image (Image1, ‘xing/xing000’) dev_open_window_fit_ima…

數字信號處理原理

關于傅里葉變換的解釋&#xff0c;在下面的鏈接&#xff1a;http://blog.jobbole.com/70549/ 。講的挺詳細的&#xff1a; 注意點&#xff1a; 1、信號處理基于這么一個概念&#xff0c;待處理的信號&#xff08;&#xff1f;&#xff09;都可以分解為正弦波&#xff0c;不同…

webpack的一些常用配置 (轉)

webpack 的配置文件就是 Node 的一個模塊&#xff0c;它導出的將是一個對象 module.exports {entry: ./entry,output: {path: path.resolve(__dirname, dist),filename: bundle.js} }如果直接使用 webpack 來執行編譯&#xff0c;webpack 默認讀取的是當前目錄下的 webpack.co…

CvMat,Mat和IplImage之間的轉化和拷貝

1、CvMat之間的復制 //注意&#xff1a;深拷貝 - 單獨分配空間&#xff0c;兩者相互獨立 CvMat* a; CvMat* b cvCloneMat(a); //copy a to b 2、Mat之間的復制 //注意&#xff1a;淺拷貝 - 不復制數據只創建矩陣頭&#xff0c;數據共享&#xff08;更改a,b,c的任意一…

HALCON示例程序particle.hdev測量小圓部分

HALCON示例程序particle.hdev測量小圓部分 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () dev_close_window () dev_open_window (0, 0, 512, 512, ‘black’, WindowID) set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’…

Java List 分頁

//分頁&#xff0c;根據country或者site分br/>Overridepublic List<Integer> getSitesPage(Integer parentLevel, Integer currentPage) {List<Integer> subFrames getSites(parentLevel) ;int currentNum ( currentPage - 1 ) * CardViewUtil.PREPAGE_NUM ;D…

跟多導出數據庫的方法

鏈接&#xff1a;http://www.2cto.com/database/201207/139330.html轉載于:https://www.cnblogs.com/nycj/p/5661151.html