邊工作邊刷題:70天一遍leetcode: day 73

Read N Characters Given Read4 I/II

要點:這題的要點就是搞清楚幾個變量的內在邏輯:只有buffer是整4 bytes的。而client要讀的bytes(需求)和實際上disk上有的bytes(供給)都是不整的。所以,

  • 循環的條件就是either 供給不足 or 需求不足:供給不足的判定是上一輪數據不夠4 bytes的mark,而需求不足是toRead的計數<=0
  • 所以循環體內,就是min(讀進來的bytes, toRead)來把數據copy到buffer里,同時更新toRead和結束條件
  • II就是加了個buffer來存上一輪的leftover和offset,在下一次讀的時候,把剩余數據假裝作為一個read4來處理。
    • 為什么要用bufSize而不是offset本身?offset表示的是數據的起始位置(當前位置是還沒讀的),可能有數據,也可能沒有。
    • 所以邏輯是只有bufSize==0才讀4 bytes,global buffer做緩沖區,而bufSize永遠標示待讀區間的大小
    • offset不斷從0向右,然后再回到0:4 bytes肯定一次讀進來

I: https://repl.it/Cjjw/1
II: https://repl.it/CjkR/2
錯誤點:

  • self.offset>=4,不是>4
  • 別忘了eof(在bufsize==0里面)
# The API: int read4(char *buf) reads 4 characters at a time from a file.# The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.# By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file.# Note:
# The read function will only be called once for each test case.# Hide Company Tags Facebook
# Hide Tags String
# Hide Similar Problems (H) Read N Characters Given Read4 II - Call multiple times# The read4 API is already defined for you.
# @param buf, a list of characters
# @return an integer
# def read4(buf):class Solution(object):def read(self, buf, n):""":type buf: Destination buffer (List[str]):type n: Maximum number of characters to read (int):rtype: The number of characters read (int)"""eof, nbytes = False, 0while not eof and nbytes<n:buf4 = [""]*4nread = read4(buf4)if nread<4:eof = Truennext = min(nread, n-nbytes)for i in xrange(nnext):buf[nbytes+i]=buf4[i]nbytes+=nnextreturn nbytes
# The API: int read4(char *buf) reads 4 characters at a time from a file.# The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.# By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file.# Note:
# The read function may be called multiple times.# Hide Company Tags Bloomberg Google Facebook
# Hide Tags String
# Hide Similar Problems (E) Read N Characters Given Read4# The read4 API is already defined for you.
# @param buf, a list of characters
# @return an integer
# def read4(buf):class Solution(object):def __init__(self):self.bufbytes, self.offset = 0,0self.buf4 = [""]*4def read(self, buf, n):""":type buf: Destination buffer (List[str]):type n: Maximum number of characters to read (int):rtype: The number of characters read (int)"""eof, nbytes = False, 0while not eof and nbytes<n:if self.bufbytes==0:self.bufbytes = read4(self.buf4)if self.bufbytes<4: # error: don't forgeteof = Truetoread = min(n-nbytes, self.bufbytes)#print toread,self.offsetfor i in xrange(toread):buf[nbytes+i]=self.buf4[self.offset+i]self.offset+=toreadif self.offset >= 4: # error: >=4, last index is 3self.offset-=4self.bufbytes-=toreadnbytes+=toreadreturn nbytes

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

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

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

相關文章

javascript時間戳和日期字符串相互轉換

1 <html xmlns"http://www.w3.org/1999/xhtml">2 <head>3 <meta http-equiv"Content-Type" content"text/html; charsetutf-8" />4 <script type"text/javascript">5 // 獲取當前時間戳(以s為單位)6 var time…

wireshark 十六進制過濾_CTF流量分析之wireshark使用

01.基本介紹在CTF比賽中&#xff0c;對于流量包的分析取證是一種十分重要的題型。通常這類題目都是會提供一個包含流量數據的pcap文件&#xff0c;參賽選手通過該文件篩選和過濾其中無關的流量信息&#xff0c;根據關鍵流量信息找出flag或者相關線索。pcap流量包的分析通常都是…

vim 插件管理

1  進入自己的vim mkdir ./bundle/vundle 2  在vimrc同級中執行 git clone https://github.com/gmarik/vundle.git ./bundle/vundle 將一些插件文件 下載到./bundle/vundle中 3  編寫自己的vim配置&#xff0c;其實很簡單 set nocompatible " be iMp…

ubuntu install wiznote

sudo add-apt-repository ppa:wiznote-team #添加官方源sudo apt-get update #更新源sudo apt-get install wiznote #安裝為知筆記

python 對象序列化 pickling_python操作文件——序列化pickling和JSON

當我們在內存中定義一個dict的時候&#xff0c;我們是可以隨時修改變量的內容的&#xff1a;>>> ddict(namewc,age28)>>>d{name: wc, age: 28}我們可以隨時修改name和age的值。但是當我們重新運行程序的時候&#xff0c;name、age的初始化值還是wc和28&#…

python實現Redis訂閱發布

Redis 發布訂閱 Redis 發布訂閱可以用在像消息通知&#xff0c;群聊&#xff0c;定向推送&#xff0c;參數刷新加載等業務場景 發布訂閱模型有三個角色&#xff1a; 發布者&#xff08;Publisher&#xff09;訂閱者(Subscriber)頻道(channel) 每個訂閱者可以訂閱多個頻道&am…

nfs的快速部署

1、nfs內核自帶協議模塊不用安裝&#xff0c;如果沒有yum安裝yum -y install nfs-utils2、配置vim /etc/exports #配置文件 此文件一般為空&#xff0c;編寫格式為&#xff1a; /share/word 192.168.31.254(rw) 192.168.31.252(ro) # 共享/share/word目錄給192.168.…

redistemplate怎么修改數據_如何使用RedisTemplate訪問Redis數據結構?

在springboot項目中&#xff0c;集成各種框架變得非常容易。下面簡單介紹一下如何在springboot項目中集成單機模式redis。集群模式也差不多&#xff0c;這里就不過多介紹了。首先你得安裝redis服務&#xff0c;無論在linux還是windows系統上。如果沒有安裝&#xff0c;請自行百…

HyperLogLog原理與在Redis中的使用

Redis-HyperLogLog 基于HyperLogLog算法&#xff0c;使用極小的空間完成巨量運算 Redis 中HyperLogLog 基本使用 常用命令 PFADD key element [element …]: 將任意數量的元素添加到指定的 HyperLogLog 里面。PFCOUNT key [key …]: 計算hyperloglog的獨立總數prmerge destk…

iOS開發UI篇—xib的簡單使用

一、簡單介紹 xib和storyboard的比較&#xff0c;一個輕量級一個重量級。 共同點&#xff1a; 都用來描述軟件界面 都用Interface Builder工具來編輯 不同點: Xib是輕量級的&#xff0c;用來描述局部的UI界面 Storyboard是重量級的&#xff0c;用來描述整個軟件的多個界面&…

【云棲計算之旅】線下沙龍第2期精彩預告:Docker在云平臺上的最佳實踐

Docker是一個開源的應用容器引擎&#xff0c;提供了一種在安全、可重復的環境中自動部署軟件的方式&#xff0c;允許開發者將他們的應用和依賴包打包到一個可移植的容器中&#xff0c;然后發布到任何流行的Linux機器上&#xff0c;也可以實現虛擬化。容器完全使用沙箱機制&…

小程序mpvue圖片繪制水印_開發筆記:使用 mpvue 開發斗圖小程序

之前用過 wepy 框架寫了個小程序 GitHub - yshkk/shanbay-mina: 基于 wepy 框架的 “扇貝閱讀” 微信小程序 &#xff0c;感覺寫法上類似 vue&#xff0c;但不那么徹底。現在美團點評發布的 mpvue 支持開發者可以用 vue 的語法開發微信小程序&#xff0c;正好有強需求需要一個斗…

mysql int類型的長度值

整數類型的存儲和范圍(來自mysql手冊) 類型字節最小值最大值(帶符號的/無符號的)(帶符號的/無符號的)TINYINT1-1281270255SMALLINT2-3276832767065535MEDIUMINT3-83886088388607016777215INT4-2147483648214748364704294967295BIGINT8-92233720368547758089223372036854775807…

龍王我當定了(一個在QQ刷龍王的腳本)

自從學了python&#xff0c;龍王再也沒丟過&#xff0c;就是經常被打, QQ 和 TIM 都可以&#xff0c;發送時要把聊天窗口打開。 # 如果import報錯&#xff0c;那可以pip下載這幾個模塊試一試 import win32gui import win32con import win32clipboard as w import random from…

時序數據合并場景加速分析和實現 - 復合索引,窗口分組查詢加速,變態遞歸加速...

時序數據合并場景加速分析和實現 - 復合索引&#xff0c;窗口分組查詢加速&#xff0c;變態遞歸加速 作者 digoal 日期 2016-11-28 標簽 PostgreSQL , 數據合并 , 時序數據 , 復合索引 , 窗口查詢 背景 在很多場景中&#xff0c;都會有數據合并的需求。 例如記錄了表的變更明細…

navicat for mysql 數據庫備份與還原

一, 首先設置, 備份保存路徑 工具 -> 選項 點開 其他 -> 日志文件保存路徑 二. 開始備份 備份分兩種, 一種是以sql保存, 一種是保存為備份 SQL保存 右鍵點擊你要備份的數據庫, -> 轉儲SQL文件 選擇位置和文件名 開始轉儲 導入 建議 刪除所有表 或 重新建數據庫 同導出…

DES的原理及python實現

DES加密算法原理及實現 DES是一種對稱加密算法【即發送者與接收者持有相同的密鑰】&#xff0c;它的基本原理是將要加密的數據劃分為n個64位的塊&#xff0c;然后使用一個56位的密鑰逐個加密每一個64位的塊&#xff0c;得到n個64位的密文塊&#xff0c;最后將密文塊拼接起來得…

python按身高體重排隊_LeetCode-python 406.根據身高重建隊列

題目鏈接難度&#xff1a;中等 類型&#xff1a; 數組假設有打亂順序的一群人站成一個隊列。 每個人由一個整數對(h, k)表示&#xff0c;其中h是這個人的身高&#xff0c;k是排在這個人前面且身高大于或等于h的人數。 編寫一個算法來重建這個隊列。注意&#xff1a;總人數…

遠程連接mysql數據庫,1130問題

遠程或使用非127.0.0.1和localhost地址連接時&#xff0c;出現代號為1130問題&#xff0c; ERROR 1130: Host 192.168.2.159 is not allowed to connect to this MySQL server 猜想這是沒有授權&#xff0c;將mysql數據庫中user表中host列的localhost改為%&#xff0c;重新啟動…

華為手機充滿有提醒嗎_2020手機充電速度排名:最快21分鐘充滿,華為第15名

5G手機扎堆出現&#xff0c;中國5G基站數量也是不斷增多&#xff0c;中國移動曾經表態&#xff0c;2020年底將會在全國地級市覆蓋5G網絡&#xff0c;全民5G時代終于到來&#xff01;從目前國內手機出貨量數據來看&#xff0c;5G手機占比已經達到了六成以上&#xff0c;國產5G手…