在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
暴力法遍歷:根據加粗處資訊,從左下或者右上開始比較時間複雜度: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題)
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 這個題其實很簡單 左上角是最小的,右下角是最大的,如果我們從最大或者最小的地方開始查詢不是很方便,想一想是不是,因為有時候選擇是不確定...