非死不可 一面

10.12面的上来直接做题

leetcode hard 158变形, 在原来的read基础上加了一个write
之前没做过这题,面试官不停hint,写出来了,但是没有时间debug+各种case。

第二天秒拒,为下面两家面试攒好运吧~呀~

write api 返回的是能够写进buffer的字符串的长度

面试官给的example是这样的:
n=5,n代表buffer的长度
[. . . . .]
write([abc]) =>3
[a b c . .]
write([def]) =>2 // 因为buffer满了,所以只能写进两个char
[a b c d e]
read(3)=>[a b c] / 3
[. . . d e]
write([xyzabc]) => 3
[x y z d e]
read(8)==>[d e x y z] // 注意这个地方d e 先读出来是因为这两个是先被write进去的, 有先后关系

corner case: [. a b . .]

我不知道我想的对不对,但是我觉得这道题有点像design circular queue的思路,我有一个size为k的char array,一个write pointer和一个read pointer,write pointer指向char array中第一个要写的位置,read pointer指向char array中第一个要读的位置。每回读或者写的时候pointer++,到达尾部的时候再回开头。不过我还加了个int size,表明这个char array中现在有多少是可以读的char。

请问 write 是做什么用的?

请问一下楼主最后怎么做的呀

具体题目在三楼~

这道题有没有限制条件要先写满了才能 read?

我跟你一样的思路,实现了一下,用楼主的test case测试了一下,觉得可行。

lz多刷刷面经吧。。这题我都看到七八次了

所以这题没有read4的api了?是要实现 read 和 write 这两个函数吗?

这题好像前一段时间出过