原题链接在这里:https://leetcode.com/problems/read-n-characters-given-read4/
题目:
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.
题解:
Given API read4, 一次最多可以read 4个char, 并把这些char保留在temp Buff中.
Ask to design another API, 能一次最多读n个char. 每次call read4, 若是返回小于4, 说明已经到了end of file, 下一次跳出while loop.
readCount计数当前共读了多少char, n-readCount就是还需要读多少个char.
Time Complexity: O(n). Space: O(1).
AC Java:
1 /* The read4 API is defined in the parent class Reader4. 2 int read4(char[] buf); */ 3 4 public class Solution extends Reader4 { 5 /** 6 * @param buf Destination buffer 7 * @param n Maximum number of characters to read 8 * @return The number of characters read 9 */ 10 public int read(char[] buf, int n) { 11 boolean eof = false; 12 char [] temp = new char[4]; 13 int readCount = 0; 14 while(!eof && readCount<n){ 15 int count = read4(temp); //read4 API读的byte都存在temp Buff中 16 eof = count < 4; 17 18 count = Math.min(count, n-readCount); //如果n减掉已经读的char的数目比count小,就只读n-readCount个char 19 for(int i = 0; i<count; i++){ 20 buf[readCount++] = temp[i]; 21 } 22 } 23 return readCount; 24 } 25 }