給自己的練習程式乙個存放的位置,僅此而已,希望自己能夠有更大的進步吧,加油
在面試的時候總是覺得自己有很多的不足,特別是基礎知識上面臨著很大的困擾,所以決定將牛客網的劍指offer上的試題全部做一遍吧。從今天開始加油吧。
二維陣列的查詢
題目描述:在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
題目分析:這道題最簡單的做法肯定是直接兩層巢狀遍歷,但是這樣時間複雜度就略高一些,o(n^2)。所以考慮利用該陣列的特殊性質,及從左上角開始考慮,進行位置判斷,這樣的話整體的複雜度就會降低比較明顯,不超過兩倍的一維陣列長度。
//測試可用
class
solution
if(array[i]
[j]< target)
if(array[i]
[j]> target)
}return
false;}
};
替換空格class
solution
l++;}
//計算位置
int p1 = l;
int p2 = l +
2* cnt;
//更新
while
(p1 >=0)
else}}
};
從尾到頭列印鍊錶
題目描述:輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。
題目分析:這個題有好幾種解法,最簡單的方法是利用乙個棧,全部壓入棧中後按順序返回乙個陣列,但是這個方法空間複雜度較大,需要額外乙個棧的空間。所以本題可以考慮先求出鍊錶的長度,之後從後向前往陣列中填位置即可。
class
solution
vector<
int>
array
(listlength)
; p = head;
int i = listlength -1;
while
(p !=
nullptr
)return array;}}
;
求乙個不存在的數
面試的時候遇到了這個題,很有趣,這裡我就記錄下來。
題目描述:乙個長度為n的陣列中,包含從1到n+1的數字大小,其中隨機缺少乙個數x,求x的值。
題目分析:這個題有好幾種方法,最簡單的做法是利用map容器,最終找到value=0的key值,時間複雜度為n,但是空間複雜度較大。
或者是利用排序,之後在遍歷一遍就很容易找到。但是快排的時間複雜度為nlogn.
這個題的最快做法就是直接將所有的資料全部相加,再求出1到n+1中所有資料的和,兩者只差就是缺少的那個數。這樣整個方法就只需要遍歷兩次,時間複雜度n,空間複雜度1。
求兩個個不存在的數
接上一題的內容擴充套件,乙個長度為n的陣列中,包含從1到n+1的數字大小,其中隨機缺少兩個數個數x和y,求x和y的值。
這個題當時我也沒有想出來,後來面試結束才想清楚具體的解法,非常的巧妙。當然首先要保證所有的資料量不能超過資料格式所限定的大小。
第一步與上題一樣,求出x+y的值。
第二部則把相加改為相乘,求出xy的值。
之後解一元二次方程就可求出具體的解。
重建二叉樹
題目描述:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
題目分析:這是很自然的一種重建二叉樹的方法,屬於基本操作。核心就是利用遞迴操作。
/**
* definition for binary tree
* struct treenode
* };
*/class
solution
int k;
int leftnum;
for(
int i = vinlow; i <= vinhigh; i++)}
if(vinlow<=k-1)
if(k+
1<=vinhigh)
return newtree;
} treenode*
reconstructbinarytree
(vector<
int> pre,vector<
int> vin)
};
用兩個棧實現佇列
題目描述:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
題目分析:棧和佇列的區別既是乙個先進後出,進出口共用乙個,乙個先進先出,乙個進口乙個出口。
class
solution
intpop()
else
int temp1=stack2.
top();
stack2.
pop();
return temp1;}}
private
: stack<
int> stack1;
stack<
int> stack2;
};
30歲從新開始
今天有點鬱悶,被乙個boss面試體無完膚,整個人都不好了。有點懷疑自己的定位是否正確。老單元遇到了瓶頸,自己選擇再出發,從管理切入要看機遇 從技術切人要補的好多。好在有空杯的心態以及家庭支援,讓我自己在這個時間段來重拾技術底層。從這次面試經歷開始說起吧 總共4個人面試,最後倒下以及自己面試準備以及面...
從新開始寫blog了
想了一圈,還是回到這裡。雖然不能完全讓我滿意,但是比較這裡能滿足我的最低的需要。既然要寫,就有些打算。首先是會盡量寫一些技術內容,同時又距離具體的 稍微遠一些。因為寫 不是寫blog。如果乙個blog裡面全是code,那我還不如直接去寫code了。也許寫一本全是code組成的書都有可能,但是這不是寫...
QT程式設計 從新開始(一)
布局 1 qt提供了qhboxlayout類 qvboxlayout 類及qgridlayout類等的基本布局管理,分別是水平排列布局 垂直排列布局和網格排列布局。它們之間的繼承關係如圖所示。2 布局中常用的方法有addwidget 和addlayout 1 addwidget 方法用於向布局中加入...