Hard
Read N Characters Given Read4 II - Call multiple times — C++
Full explanation · Time O(n) · Space O(1)
// Time: O(n)
// Space: O(1)
// Forward declaration of the read4 API.
int read4(char *buf);
// shorter version of Solution2
class Solution {
public:
/**
* @param buf Destination buffer
* @param n Maximum number of characters to read
* @return The number of characters read
*/
int read(char *buf, int n) {
int i = 0;
while (i < n && (i4_ < n4_ || (i4_ = 0) < (n4_ = read4(buf4_)))) {
buf[i++] = buf4_[i4_++];
}
return i;
}
private:
char buf4_[4];
int i4_ = 0, n4_ = 0;
};
// Time: O(n)
// Space: O(1)
class Solution2 {
public:
/**
* @param buf Destination buffer
* @param n Maximum number of characters to read
* @return The number of characters read
*/
int read(char *buf, int n) {
int i = 0;
while (i < n) {
if (i4_ < n4_) { // Any characters in buf4.
buf[i++] = buf4_[i4_++];
} else if (n4_ = read4(buf4_)) { // Read more characters.
i4_ = 0;
} else { // Buffer has been empty.
break;
}
}
return i;
}
private:
char buf4_[4];
int i4_ = 0, n4_ = 0;
};