Interview Preparation

Read N Characters Given Read4

Source

  1. leetcode

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.

Analysis

Simply read until eof all already read n characters.

Corner Case:

  1. When for examples four characters were read, but actually we only need to read 2 more characters.

Complexity

Time: O(N)

Space: O(1)

Code

/* The read4 API is defined in the parent class Reader4.
    int read4(char[] buf); */

public class Solution extends Reader4 {
  /**
   * @param buf Destination buffer
   * @param n   Maximum number of characters to read
   * @return    The number of characters read
   */
  public int read(char[] buf, int n) {
    char[] buffer = new char[4];
    int totalCharactersRead = 0;
    boolean eof = true;
    while (!eof && totalCharactersRead < n) {
      int charctersInBuffer = read4(buffer);
      if (charctersInBuffer < 4) {
        eof = true;
      }
      int numCharactersUsed = Math.min(charctersInBuffer, n - totalCharactersRead);
      for (int i = 0; i < numCharactersUsed; i++) {
        buf[totalCharactersRead + i] = buffer[i];
      }
      totalCharactersRead += numCharactersUsed;
    }
    return totalCharactersRead;
  }
}