劍指Offer66題之每日6題 第一天

2021-10-03 23:48:38 字數 3167 閱讀 3853

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

暴力法遍歷:根據加粗處資訊,從左下或者右上開始比較

時間複雜度:o(2n) 。

class

solution

return

false;}

};

利用有序這個條件,可以逐行二分查詢。

時間複雜度:o(nlogn)。

class

solution

};

學習:

1、(int)array.size()變數前加(int),型別強制轉換

2、stl中的二分查詢,binary_search(起始位置,終止位置,查詢數值)

求出空格數,把str指向的空間容量擴大到能接納替換後的字串容量大小,使用realloc函式,然後從原始字串的尾部把字元乙個乙個複製到擴容字串的尾部,遇到空格就替換,只有從尾部開始才能保證資料不被覆蓋。

class

solution

str =

(char*)

realloc

(str, length +=2

*count)

;for

(int j = length -

1; i >=

0; i--

)else}}

};

學習:

void *realloc(void *ptr, size_t size);擴大容器 詳解

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

兩種方法:

1、棧2、遞迴

class

solution

while

(!stack1.

empty()

)return arr;}}

;

遞迴。

/**

* struct listnode

* };

*/class

solution

void

dfs(listnode* head, vector<

int>

& arr)

};

學習:

1、遞迴函式傳參的時候記得傳引用而不是傳值(值、引用、位址詳解)

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

知道前序和中序遍歷的結果是可以唯一確定一顆二叉樹的,但是知道前序和後序遍歷是不可以唯一確定一顆二叉樹的。

利用前序遍歷第乙個數字為根,用這個根在中序遍歷中查詢,左邊的就是左子樹,右邊的就是右子樹,算出左右子樹的長度,用其長度在前序遍歷中劃分出左右子樹,重複上述過程,就可以重建這顆二叉樹了。

struct treenode };

class

solution

treenode*

helper

(vector<

int>

&pre, vector<

int>

&vin,

int p_l,

int p_r,

int v_l,

int v_r)

proot-

>left =

helper

(pre, vin, p_l+

1, p_l + mid - v_l, v_l, mid -1)

; proot-

>right =

helper

(pre, vin, p_l + mid - v_l+

1, p_r, mid+

1, v_r)

;return proot;}}

;

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

用乙個棧專門來完成push操作;

用另乙個棧來完成pop操作,如果這個棧為空,那麼就把第乙個棧的元素依次出棧然**棧到該棧,由於元素在第乙個棧中是先入後出,經過加粗的步驟,元素就變成了先入先出了,滿足佇列的性質。

class

solution

intpop()

}int res = stack2.

top();

stack2.

pop();

return res;

}private

: stack<

int> stack1;

// 資料棧

stack<

int> stack2;

// 輔助棧

};

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

1、暴力法

時間複雜度o(n)

class

solution

return min;}}

;

二分查詢

劍指Offer66題之每日6題 第二天

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。n 39。斐波拉契數列的定義 用f1,f2分別表示 fi 2,fi 1,用ret表示fifi,每次令ret f1 f2,sum就表示fi得到fn,然後把f1,f2分別更新為fi 1,fi,依次類推,sum的值就是最終fn的...

劍指Offer66題之每日6題 第七天

統計乙個數字在排序陣列 現的次數。1 遍歷,時間複雜度o n class solution return count 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。struct treenode class solution ...

劍指offer 66題 part1(1 6題)

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 這個題其實很簡單 左上角是最小的,右下角是最大的,如果我們從最大或者最小的地方開始查詢不是很方便,想一想是不是,因為有時候選擇是不確定...