2015年10月15日星期四

Leetcode 158 Read N Characters Given Read4 II - Call multiple times

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.
Solution 1: need to record the buf4 and how many characters available from last read (m). 
 public class Solution extends Reader4 {  
   char[] buf4=new char[4];  
   int m=0;  
   public int read(char[] buf, int n) {  
     int i=0, j=0;  
     while (i<n && j<m) buf[i++]=buf4[j++];  
     if (i==n) {  
       for (int k=j; k<m; k++) buf4[k-j]=buf4[k];  
       m-=j;  
       return n;  
     }  
     while (true) {  
       m=read4(buf4);  
       j=0;  
       while (i<n && j<m) buf[i++]=buf4[j++];  
       if (i==n) {  
         for (int k=j; k<m; k++) buf4[k-j]=buf4[k];  
         m-=j;  
         return n;  
       }  
       if (m<4) {  
         m=0;  
         return i;  
       }  
     }  
   }  
 }  

没有评论:

发表评论