二刷 經典OJ題型彙總

2021-10-01 02:18:23 字數 2933 閱讀 9675

這題思路

我知道!

每日總結

經典題型

一、 i=i+2 與 i+=2 的區別:

簡單說就是i=i+2 比 i+=2多了一次對變數 i 的運算。i=i+2是先進行i+2的運算得出乙個結果,再賦值給i。i+=2就是先賦值然後在進行加法。

c語言中i +=2 等同於 i = i + 2 這是簡略寫法,但是計算時演算法不相同,i=i+2更容易得出i的賦值。例如:i=1,則i=i+2得到的結果是i=3,而i+=2得到的結果是i=1,運算得到的值不相同。

i=i+2運算效率最低,因為運算時讀取右i的位址i+1,讀取左i的位址;將右值傳給左邊的i(編譯器並不認為左右i的位址相同),而i+=2運算時讀取右i的位址,令i=1,將得到的值傳給i(因為i的位址已經讀出)

i = i + 2 和 i += 2都是和賦值相關的運算,賦值運算子除了=和+=外還包括-=,*=,/=,%=,&=,|=,^=,>>=<<=。其中=稱為簡單賦值,+=,-=,*=,/=,%=稱為復合算術賦值,&=,|=,^=,>>=,<<=稱為復合位運算賦值。

任何引用都必須指向乙個例項;

過載函式:這是同名函式的形式引數,(☞引數的個數、型別或者順序)必須不同,基函式的引數列表不同,同乙個運算子完成不同的運算功能,就是過載函式。

內聯函式(inline),不可以是虛函式;

派生類的虛函式與基類的虛函式具有不同的引數個數和型別;

派生類必須重新定義及基類的虛函式;

auto是c++程式語言的關鍵字。用於兩種情況(1)宣告變數時根據初始化表示式自動推斷該變數的型別(2)宣告函式時函式返回值的佔位符

先呼叫派生類的析構函式,再呼叫基類的析構函式。

乙個類的靜態成員:該類的靜態資料成員變數的值可以修改。

stl中的unordered_map和priority_queue使用的底層資料結構分別是:紅黑樹和heap。

乙個空類預設一定生成建構函式,拷貝建構函式,賦值操作符,引用操作符,析構函式

day1::

靜態成員可以在類體外進行初始化。

靜態成員是所有物件所共有的。

程式設計題組隊競賽:

**如下:

/*貪心演算法:每次選值都選當前能看到的區域性最優解!

*/#include#include#includeusing namespace std;

int main()

//排序,[0,n-1]的n個數做每組的左邊,剩餘兩個數為一組,大的數做最右邊的數,次大的數做中間值

std::sort(arr.begin(),arr.end());

for(int i=n;i<=3*n-2;i+=2)

cout<2.刪除公共字元:

**如下:

/*輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入」they are students.」和」aeiou」,則刪除之後的第乙個字串變成」thy r stdnts.」

*/#include#includeusing namespace std;

int main();

for(int i=0;i3、找字串中連續最長的數字串

/*解題思路----找到字串中連續最長的數字

遍歷字串,使用cur去記錄連續的數字串,遇到不是數字就表示乙個連續的數字串結束了,

則將該數字串跟之前的數字串進行比較,如果更長,則更新更長的數字串到cur中

*/#include#includeusing namespace std;

int main()

else。由於數字2在陣列**現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

解題思路:

如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。在遍歷陣列時儲存兩個值:

一是陣列中乙個數字,一是次數。遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減

1;若次數為0,則儲存下乙個數字,並將次數置為1。遍歷結束後,所儲存的數字即為所求。然後再判斷它

是否滿足條件。

··

¥¥¥¥

class solution

};/*

測試用例:功能測試(輸入的陣列中存在乙個出現次數超過陣列長度一半的數字;輸入的陣列中不存在乙個出現次數超過陣列長度一半的數字)

特殊輸入測試:(輸入的陣列中只有乙個數字:輸入nullptr指標)

*/

5、 倒置字串:將一句話的單詞進行倒置,標點不倒置。

比如 i like beijing.

經過函式後變為:beijing. like i

/*1、先將整個字串逆置過來,再遍歷字串,找出每個單詞,對單詞逆置。這裡我們使用了stl演算法中的

reverse,所以這裡使用迭代器遍歷string

2、第二思路是乙個比較討巧的思路,直接利用cin>>s接收輸入,遇到空格就結束了,自然就分割開了每個單

詞,其次將每次接收到的單詞拼接到之前串的前面就逆置過來了

*/方法一:

#include#include#includeusing namespace std;

/*int main()

cout<7、 統計回文數

/*暴力求解方式計算,遍歷str1,將str2插入到str1的每個位置,判斷是否構成回文數,若是就count++

每次使用str1拷貝構造乙個str,再進行插入。

*/#include#includeusing namespace std;

//判斷是否構成回文數

bool iscircletext(const string& s){

size_t begin=0;

size_t end =s.size()-1;

while(begin~未完待續!~

~還是太菜,仍需閉關修煉~

二叉樹題型彙總

題目描述 分別按照二叉樹先序,中序和後序列印所有的節點。輸入 返回 1,2,3 2,1,3 2,3,1 思路 建立返回vector,vector的0號元素放在左右子樹遍歷之前,vector1號元素放在左右子樹遍歷之間,vector2號元素放在左右子樹遍歷之後 class solution vecto...

杭電OJ刷題系列 二

目錄 2039.三角形 1720.a b coming 1062.text reverse 2104.hide handkerchief 1064.financial management 2734.quicksum 1170.balloon comes 1197.specialized four ...

C語言函式06 函式知識點 經典題型彙總 部分

1 以下關於函式敘述中,錯誤的是?a 函式未被呼叫時,系統將不為形參分配記憶體單元 b 實參與形參的個數必須相等,且實參與形參的型別必須對應一致 c 當形參是變數時,實參可以是常量 變數或表示式 d 如函式呼叫時,實參與形參都為變數,則這兩個變數不可能共享同一記憶體空間 答案 b 強制轉換問題 2 ...