易保研機試訓練營 基礎營 常見演算法

2021-10-07 02:31:41 字數 2638 閱讀 5931

1.1string類的substring()方法用於擷取字串

string substring

(int beginindex)

用途:返回乙個新字串,它是此字串的乙個子字串。該子字串始於指定索引處的字元,一直到此字串末尾

引數:beginindex - 開始處的索引(包括)

返回:指定的子字串

public string substring

(int beginindex,

int endindex)

用途:返回乙個新字串,它是此字串的乙個子字串。該子字串從指定的 beginindex 處開始, endindex:到指定的 endindex-1處結束

引數1:beginindex - 開始處的索引(包括)

引數2:endindex 結尾處索引(不包括)

返回:指定的子字串

1.2string類的clear函式用於清空重置。

2.1greater和less需要標頭檔案< functional >。

2.2兩種堆

//公升序佇列,小頂堆

priority_queue <

int,vector<

int>

,greater<

int>

> q;

//降序佇列,大頂堆

priority_queue <

int,vector<

int>

,less<

int>

>q;

//greater和less是std實現的兩個仿函式(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)

2.3

和佇列基本操作相同:

top 訪問隊頭元素

empty 佇列是否為空

size 返回佇列內元素個數

push 插入元素到隊尾 (並排序)

emplace 原地構造乙個元素並插入佇列

pop 彈出隊頭元素

swap 交換內容

題型一:有若干個活動,第i個開始時間和結束時間是[si,fi),只有乙個教室,活動之間不能交疊,求最多安排多少個活動?

策略:結束時間越早的活動優先

**:

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e4+10;

const

int inf =

0x3f3f3f3f

;struct d

}board[maxn]

;int

main()

sort

(board+

1,board+

1+n)

;int sum =0;

int t =

-inf;

for(

int i=

1; i<=n ;

++i)

}printf

("%d\n"

,sum);}

return0;

}

題型二:有若干個活動,第i個開始時間和結束時間是[si,fi),活動之間不能交疊,要把活動都安排完,至少需要幾個教室?

策略:按照開始時間排序優先安排活動,如果衝突,則加乙個教室。

簡單地理解一下,策略是這樣,我們把活動按照開始時間有小到大的順序排序。假設目前已經分配了k個教室(顯然k初始等於0),對於當前這個活動,

(1) 如果它能安排在k個教室裡的某乙個,則把它安排在其中的任何乙個教室裡,k不變。

(2) 否則它和每個教室裡的活動都衝突,則增加乙個教室,安排這個活動。

**:

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e4+10;

struct d

}board[maxn*2]

;int re[maxn*2]

;int

main()

sort

(board+

1,board+

1+n*2)

;//用於解決重疊點問題,從前往後或者從後往前均可

for(

int i=n*

2; i>0;

--i)

}//計算各點山高度,其實可以直接和下面的**混合

for(

int i=

1; i<=n*2;

++i)

int ma =0;

int t =0;

for(

int i=

1; i<=n*2;

++i)

printf

("%d\n"

,ma);}

return0;

}

實現:具體講解這裡跳轉

易保研機試訓練營 基礎營 特殊演算法

1.時間複雜度 2.空間複雜度 3.資料溢位 long long有時可以解決 前部用陣列等資料結構暫存中間過程某值的一組答案,在 後部直接從這組答案中查詢,不需要再計算,節省時間。用兩個一維陣列模擬二維陣列中相鄰的兩行,向下滾動,節省空間複雜度。1.從1到sqrt x 檢視x是否為素數,演算法時間複...

牛客寒假演算法基礎演算法訓練營2

1 座與重修費 題目描述 期末考試結束了,座發現很多人掛了大物,只能等著第二年重修,還要交400元的重修費。座突然想起有個學長和他講過,如果學校哪一年缺錢了,那一年的大物試卷就會特別難。現在 座有了所有人的成績,座想知道如果所有掛科的人都在第二年重修,學校能賺多少重修費?掛科是指一門課的分數小於60...

牛客寒假演算法基礎訓練營6

早知道這次題目這麼簡單就認真做了,最後一場沒心做,後面懶得想了,唉罪過罪過 1 煤氣灶 題目描述 小j開始打工,準備賺錢買煤氣灶。第一天,小j的工資為n元,之後每天他的工資都比前一天多d元。已知煤氣灶需要m元,求小j最少工作幾天才能買到煤氣灶。輸入描述 四個整數 n,m,d,x 分別表示小j第一天的...