小紅書9 3筆試

2021-09-26 20:10:16 字數 4421 閱讀 6723

1.

題目描述:

薯隊長寫了一篇筆記草稿,請你幫忙輸出最後內容。

①.輸入字元包括英文本元,"(" , ")" 和 "<"。

②.英文本元表示筆記內容。

③. (  ) 之間表示注釋內容,任何字元都無效。 括號保證成對出現。

④. "<" 表示退格, 刪去前面乙個筆記內容字元。 括號不受 "<" 影響 。

輸入輸入一行字串。長度 <= 10000.

輸出輸出一行字串,表示最終的筆記內容。

樣例輸入

a《提示

a退格刪除掉了, 括號裡面的c不要,  最後乙個< 無效

兩個解決方案:

第乙個使用棧(沒有提交執行過,僅測試過部分示例):

#include#include#include#includeusing namespace std;

void str_print(string str)

else

}} if (i >= str.length())break;

//s非空

if (s.top() != '(')

else

} else

else if (str[i] == ')')

} }vectorres;

while (!s.empty())

for (int i = res.size() - 1; i >= 0; i--)

}int main()

第二個不適用棧:

#include #include #include using namespace std;

int main()

else if (input_str[i] == ')')

else if (input_str[i] == '<')

}else

}} for (i = 0; i < (int)content.size(); ++i)

cout << endl;

return 0;

}

2.

題目描述:

薯隊長最近在玩乙個迷宮探索類遊戲,迷宮是乙個n*n的矩陣形狀,其中會有一些障礙物禁止通過。這個迷宮還有乙個特殊的設計,它的左右邊界以及上下邊界是連通的,比如在(2,n)的位置繼續往右走一格可以到(2,1), 在(1,2)的位置繼續往上走一格可以到(n,2)。請問薯隊長從起點位置s,最少走多少格才能到達迷宮的出口位置e。

輸入第一行正整數 n。 接下來 n 行 字串。 

』.』表示可以通過,』#』表示障礙物, 』s』表示起點(有且僅有乙個),』e』表示出口(有且僅有乙個)。

對於50%的資料

0 < n < 10

對於100%的資料

0 < n < 10^3

輸出輸出乙個整數。表示從s到e最短路徑的長度, 無法到達則輸出 -1

樣例輸入

5.#…

..#s.

.e###

…..…..

樣例輸出4提示

向右來到(2,5)

向右來到(2,1)

向下來到(3,1)

向右來到(3,2)

#include#include#includeusing namespace std;

void bfs(vector> matrix)

if (matrix[i][j] == 'e')

} }//bfs

queue>s;

s.push(source);

vectorvisit_array(matrix.size(), false);

vector>visit(matrix.size(), visit_array);

visit[source[0]][source[1]] = true;

while (!s.empty())

else if (matrix[(temp[0] - 1 + matrix.size()) % matrix.size()][temp[1]] == 'e')

//下if (!visit[(temp[0] + 1) % matrix.size()][temp[1]] && matrix[(temp[0] + 1) % matrix.size()][temp[1]] == '.')

else if (matrix[(temp[0] + 1) % matrix.size()][temp[1]] == 'e')

//左if (!visit[temp[0]][(temp[1] - 1 + matrix.size()) % matrix.size()] && matrix[temp[0]][(temp[1] - 1 + matrix.size()) % matrix.size()] == '.')

else if (matrix[temp[0]][(temp[1] - 1 + matrix.size()) % matrix.size()] == 'e')

//右if (!visit[temp[0]][(temp[1] + 1) % matrix.size()] && matrix[temp[0]][(temp[1] + 1) % matrix.size()] == '.')

else if (matrix[temp[0]][(temp[1] + 1) % matrix.size()] == 'e')

} cout << exit[2] << endl;

}int main()

char_matrix.push_back(char_array);

} bfs(char_matrix);

return 0;

}

3.

題目描述:

在遊戲中,擊敗魔物後,薯隊長獲得了n件寶物,接下來得把這些寶物賣給寶物**員來賺點小錢。這個**員有個壞毛病,每次賣給他一件寶物後,之後他就看不上比這件寶物差的寶物了。在這個世界中,衡量寶物的好壞有兩個維度,稀有度x和實用度h,**員在**乙個寶物a後,下乙個寶物的稀有度和實用度都不能低於寶物a。那麼薯隊長如何制定售賣順序,才能賣給**員寶物總個數最多。

輸入第一行乙個正整數n。

接下來n行。每行兩個整數分別表示x 和 h

x1 h1

x2 h2

xn hn

輸入限制:

對於70%的資料:

0 < n < 10^4

0 < xi < 10^6

0 < hi < 10^6

對於100%的資料:

0 < n < 10^6

0 < xi < 10^6

0 < hi < 10^6

輸出乙個整數,表示最多可以賣出的寶物數

樣例輸入

43 2

1 11 3

2 2樣例輸出3提示

1. 將寶物2 (1,1)賣出

2. 將寶物4 (2,2)賣出

3. 將寶物1 (3,2)賣出

#include#include#includeusing namespace std;

//方法一:複雜度o(n2)

void lis(vector>matrix)

} d[i] = maxlength + 1;

} int max = d[0];

for (int i = 1; i < d.size(); i++)

} cout << max << endl;

}//方法二:複雜度o(nlogn)

void lis_gready_binary(vector>matrix)

vectorlow;

//low[i]記錄長度為i+1的lis結尾元素最小值

//貪心:對於乙個公升序子串行,顯然其結尾元素越小,越有利於在後面接其他的元素,也就越可能變得更長

low.push_back(matrix[0][1]);

for (int i = 1; i < matrix.size(); i++)

int l = 0, r = low.size() - 1;

//二分:找low陣列第二列中第乙個比matrix[i][1]大的數

while (l < r)

else if (low[mid] < matrix[i][1])

else

} low[l] = matrix[i][1];

} cout << low.size() << endl;

}int main()

//第一步:根據第一列排序

sort(matrix.begin(), matrix.end());//預設按第一列排序

//第二步:對第二列找最長公升序子串行

lis(matrix);

lis_gready_binary(matrix);

return 0;

}

最長上公升子串行問題:

leetcode:300、354

參考:

小紅書0906筆試

題目 輸入終點x 輸入每天最小航速l,最大航速t和資料組數n 然後有n個數字,每個數字代表座標位置處是危險區域 求到達終點最少停留在危險區域的次數 例如 輸入 102 3 4 5 4 2 3 輸出1 還沒驗證過。include include include include include usin...

小紅書 筆試題(20190903)

設定標誌位flag判斷是否進入注釋部分,注釋的開始和取消來自於棧comment的實現。def backup note seq res comment flag false for su in seq ifnot flag if su.islower elif su if res res.pop el...

2015筆試記錄

0916去哪兒網 1.removeelement arr,index 這麼簡單的題竟然寫錯了,把splice方法的返回值記錯了,splice返回的是刪除的元素陣列!2.陣列亂序問題 以前看過fisher yates的洗牌演算法,所以有點思路,但還是有細節錯誤 math.random 的範圍是 0,1...