最新国产好看的视频,伊人天堂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ù)的了解與使用,以下就是詳細(xì)內(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 中沒有東西了,返回當(dāng)前的坐標(biāo)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ù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 如何查看進程實際的內(nèi)存占用情況詳解

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

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

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

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

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

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

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

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

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

    這篇文章主要為大家詳細(xì)介紹了C語言版停車位管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    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)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • C++日歷拼圖的解法你了解嗎

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

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

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

    函數(shù)以及函數(shù)的遞歸調(diào)用是學(xué)習(xí)C語言必須要掌握的內(nèi)容,且遞歸作為經(jīng)典的算法思想被廣泛應(yīng)用于程序設(shè)計中,下面這篇文章主要給大家介紹了關(guān)于C語言中遞歸的實際應(yīng)用與經(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

最新評論

孝感市| 绵竹市| 宜章县| 修水县| 巴彦县| 德格县| 巧家县| 丹凤县| 巴彦县| 尚义县| 新田县| 抚州市| 酒泉市| 清徐县| 日照市| 万源市| 日喀则市| 新绛县| 四会市| 南溪县| 那坡县| 岳池县| 福清市| 翁牛特旗| 朔州市| 嫩江县| 西丰县| 大石桥市| 伊金霍洛旗| 临高县| 汾西县| 双峰县| 马鞍山市| 石城县| 确山县| 卢龙县| 武定县| 漠河县| 漳平市| 永仁县| 湖南省|