最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調(diào)用)

 更新時間:2021年07月30日 14:58:26   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調(diào)用),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 158. Read N Characters Given Read4 II - Call multiple times 用Read4來讀取N個字符之二 - 多次調(diào)用

Given a file and assume that you can only read the file using a given method read4, implement a method read to read n characters. Your method read may be called multiple times.

Method read4:

The API read4 reads 4 consecutive characters from the file, then writes those characters into the buffer array buf.

The return value is the number of actual characters read.

Note that read4() has its own file pointer, much like FILE *fp in C.

Definition of read4:

    Parameter:  char[] buf
Returns:    int

Note: buf[] is destination not source, the results from read4 will be copied to buf[]

Below is a high level example of how read4 works:

File file("abcdefghijk"); // File is "abcdefghijk", initially file pointer (fp) points to 'a'
char[] buf = new char[4]; // Create buffer with enough space to store characters
read4(buf); // read4 returns 4. Now buf = "abcd", fp points to 'e'
read4(buf); // read4 returns 4. Now buf = "efgh", fp points to 'i'
read4(buf); // read4 returns 3. Now buf = "ijk", fp points to end of file

Method read:

By using the read4 method, implement the method read that reads n characters from the file and store it in the buffer array buf. Consider that you cannot manipulate the file directly.

The return value is the number of actual characters read.

Definition of read:

    Parameters: char[] buf, int n
Returns: int

Note: buf[] is destination not source, you will need to write the results to buf[]


Example 1:

File file("abc");
Solution sol;
// Assume buf is allocated and guaranteed to have enough space for storing all characters from the file.
sol.read(buf, 1); // After calling your read method, buf should contain "a". We read a total of 1 character from the file, so return 1.
sol.read(buf, 2); // Now buf should contain "bc". We read a total of 2 characters from the file, so return 2.
sol.read(buf, 1); // We have reached the end of file, no more characters can be read. So return 0.

Example 2:

File file("abc");
Solution sol;
sol.read(buf, 4); // After calling your read method, buf should contain "abc". We read a total of 3 characters from the file, so return 3.
sol.read(buf, 1); // We have reached the end of file, no more characters can be read. So return 0.

Note:

  1. Consider that you cannot manipulate the file directly, the file is only accesible for read4 but not for read.
  2. The read function may be called multiple times.
  3. Please remember to RESET your class variables declared in Solution, as static/class variables are persisted across multiple test cases. Please see here for more details.
  4. You may assume the destination buffer array, buf, is guaranteed to have enough space for storing n characters.
  5. It is guaranteed that in a given test case the same buffer buf is called by read.

這道題是之前那道 Read N Characters Given Read4 的拓展,那道題說 read 函數(shù)只能調(diào)用一次,而這道題說 read 函數(shù)可以調(diào)用多次,那么難度就增加了,為了更簡單直觀的說明問題,舉個簡單的例子吧,比如:

buf = "ab", [read(1),read(2)],返回 ["a","b"]

那么第一次調(diào)用 read(1) 后,從 buf 中讀出一個字符,就是第一個字符a,然后又調(diào)用了一個 read(2),想取出兩個字符,但是 buf 中只剩一個b了,所以就把取出的結(jié)果就是b。再來看一個例子:

buf = "a", [read(0),read(1),read(2)],返回 ["","a",""]

第一次調(diào)用 read(0),不取任何字符,返回空,第二次調(diào)用 read(1),取一個字符,buf 中只有一個字符,取出為a,然后再調(diào)用 read(2),想取出兩個字符,但是 buf 中沒有字符了,所以取出為空。

但是這道題我不太懂的地方是明明函數(shù)返回的是 int 類型啊,為啥 OJ 的 output 都是 vector<char> 類的,然后我就在網(wǎng)上找了下面兩種能通過OJ的解法,大概看了看,也是看的個一知半解,貌似是用兩個變量 readPos 和 writePos 來記錄讀取和寫的位置,i從0到n開始循環(huán),如果此時讀和寫的位置相同,那么調(diào)用 read4 函數(shù),將結(jié)果賦給 writePos,把 readPos 置零,如果 writePos 為零的話,說明 buf 中沒有東西了,返回當前的坐標i。然后用內(nèi)置的 buff 變量的 readPos 位置覆蓋輸入字符串 buf 的i位置,如果完成遍歷,返回n,參見代碼如下:

解法一:

// Forward declaration of the read4 API.
int read4(char *buf);

class Solution {
public:
    int read(char *buf, int n) {
        for (int i = 0; i < n; ++i) {
            if (readPos == writePos) {
                writePos = read4(buff);
                readPos = 0;
                if (writePos == 0) return i;
            }
            buf[i] = buff[readPos++];
        }
        return n;
    }
private:
    int readPos = 0, writePos = 0;
    char buff[4];
};

下面這種方法和上面的方法基本相同,稍稍改變了些解法,使得看起來更加簡潔一些:

解法二:

// Forward declaration of the read4 API.
int read4(char *buf);

class Solution {
public:
    int read(char *buf, int n) {
        int i = 0;
        while (i < n && (readPos < writePos || (readPos = 0) < (writePos = read4(buff))))
            buf[i++] = buff[readPos++];
        return i;
    }
    char buff[4];
    int readPos = 0, writePos = 0;
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/158

類似題目:

Read N Characters Given Read4

參考資料:

https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/

https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/discuss/49598/A-simple-Java-code

https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/discuss/49607/The-missing-clarification-you-wish-the-question-provided

到此這篇關(guān)于C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調(diào)用)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)用Read4來讀取N個字符之二 - 多次調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)LeetCode(130.包圍區(qū)域)

    C++實現(xiàn)LeetCode(130.包圍區(qū)域)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(130.包圍區(qū)域),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 如何查看進程實際的內(nèi)存占用情況詳解

    如何查看進程實際的內(nèi)存占用情況詳解

    本篇文章是對如何查看進程實際的內(nèi)存占用情況進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)簡單的掃雷功能

    C語言實現(xiàn)簡單的掃雷功能

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的掃雷功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    這篇文章主要介紹了Qt中CQGUI框架之陰影圓角窗口實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • OpenCV3實現(xiàn)車牌識別(C++版)

    OpenCV3實現(xiàn)車牌識別(C++版)

    這篇文章主要為大家詳細介紹了OpenCV3實現(xiàn)車牌識別功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言版停車位管理系統(tǒng)

    C語言版停車位管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言版停車位管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言文件操作與相關(guān)函數(shù)介紹

    C語言文件操作與相關(guān)函數(shù)介紹

    文件(file)一般指存儲在外部介質(zhì)上數(shù)據(jù)的集合,比如我們經(jīng)常使用的.txt, .bmp, jpg. .exe,.rmvb等等,下面這篇文章主要給大家介紹了關(guān)于C語言文件操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • C++日歷拼圖的解法你了解嗎

    C++日歷拼圖的解法你了解嗎

    這篇文章主要為大家詳細介紹了日歷拼圖C++的解法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言中遞歸的實際應用與經(jīng)典問題

    C語言中遞歸的實際應用與經(jīng)典問題

    函數(shù)以及函數(shù)的遞歸調(diào)用是學習C語言必須要掌握的內(nèi)容,且遞歸作為經(jīng)典的算法思想被廣泛應用于程序設計中,下面這篇文章主要給大家介紹了關(guān)于C語言中遞歸的實際應用與經(jīng)典問題的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C++?用紅黑樹模擬實現(xiàn)set、map的示例代碼

    C++?用紅黑樹模擬實現(xiàn)set、map的示例代碼

    set、map的底層結(jié)構(gòu)是紅黑樹,它們的函數(shù)通過調(diào)用紅黑樹的接口來實現(xiàn),本文主要介紹了C++?用紅黑樹模擬實現(xiàn)set、map,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論

信丰县| 阳东县| 汾西县| 特克斯县| 广元市| 侯马市| 阳春市| 佛教| 北海市| 渝北区| 格尔木市| 衢州市| 化州市| 达日县| 子洲县| 安仁县| 宣汉县| 博白县| 长岛县| 泰来县| 长丰县| 二连浩特市| 雷州市| 桐庐县| 高阳县| 榕江县| 茌平县| 六盘水市| 原阳县| 方正县| 琼中| 乐清市| 江孜县| 抚远县| 江口县| 尚志市| 台江县| 城步| 体育| 南平市| 郁南县|