括號匹配問題
問題描述
有如』()(())』這樣的字串,要進行判斷該字串是否完全匹配,也就是括號是否是都可以匹配完,如』()((()(『這樣的字串就不能正常匹配。如果是』()』這樣的字串,又該如何處理。
問題分析
想到這裡要對括號進行匹配,就可以把左邊的括號壓入棧中,然後字串中遇到右邊的括號的時候將棧頂元素進行彈出就可以了,最後判斷棧是否為空,從而進行判斷。
**實現:
/**
* [判斷一段字串中的括號是否匹配]
*@param [string] $str [要進行判斷的字串]
*@return [boolean] [最終結果]
*/function
adjust
($str) else
if ($str[strlen($str) - 1] == '(')
// 如果遇到(進行入棧
if ($str[$i] == '(') else
if ($str[$i] == ')') else}}
// 判斷棧是否為空
if (count($resarr) == 0) else
}
上面的**只描述了只有小括號的情況,但是在中括號或者大括號的情況下,思路基本上是一致的,不過多了乙個判斷就是在彈出棧頂元素的時候,要對棧頂元素進行判斷,是否是後邊要進行匹配的元素,然後再彈出。
尋找中位數問題
問題描述
有乙個序列如:,該序列是公升序的,其中位數就是19,現在有兩個中需的序列如:s1, ; s2, ,這樣則兩個序列的中位數就是:8。
問題分析
這裡可以看到兩個序列的時候是將兩個序列合併之後再找到合併之後的序列的中位數,可是這樣做的時候會發現其時間複雜度和空間複雜度都不是最好的。
又想到合併之後的序列可以進行刪除序列的頭元素和尾元素,這樣迴圈,知道合併後的序列剩餘乙個或兩個元素時,停止刪除,得到的就是中位數了。但是這樣做的時候空間複雜度又不是最好的。
所以最終的想法是:分別刪除兩個序列中的最小和最大元素,知道兩個序列中的元素總和剩餘乙個或兩個時,停止刪除,得到中位數。
**實現
/**
* [獲取兩個陣列中的中位數]
*@param [array] $arr [第乙個陣列]
*@param [array] $brr [第二個陣列]
*@return [int] [返回中位數]
*/function
getmiddlenum
($arr, $brr)
// 陣列有長度的時候再獲取當前陣列中的最小和最大的數
if (count($brr))
// 刪除兩個序列中最小的元素
if ((null != $lowb) && (null != $lowa)) else
}else
if (null == $lowb) else
if (null == $lowa)
// 刪除兩個序列中最大的元素
if ((null != $higha) && (null != $highb)) else
}else
if (null == $highb) else
if (null == $higha)
// 判斷如果兩個陣列的總長度為2或者1的時候,獲取中位數
$finallength = count($arr) + count($brr);
if (1 == $finallength) else
}else
if (2 == $finallength) else
if (2 == count($brr)) elseelse}}
$loopnum--;
}}
微創SDTE筆試題
part one 1.protected internal 修飾乙個類和方法的時候,意味著什麼?2.什麼是引用引數?什麼是out引數?二者的區別。分別寫出引用引數和out引數的發放,並呼叫。3.什麼是delegate,用程式舉例。4.找出一段 的錯誤。不記得 了 5.分別寫出含有 virtual,a...
創鄰科技筆試題
題目1 小明的女朋友最喜歡在網上買買買了,可是錢包裡鈔票有限,不能想買啥就買啥。面對琳琅滿目的物品,她想買盡可能多的種類,每種只買一件,同時總 還不能超過預算上限。於是她請小明寫程式幫她找出應該買哪些物品,並算出這些物品的總 輸入規範 每個輸入包含兩行。第一行是預算上限。第二行是用空格分隔的一組數字...
演算法筆試題
一 不引入新變數交換兩個變數的值 1 通過加法 不好的地方在於如果a值足夠大,以至於加乙個數就溢位,比如int型在常見的32位或64位機器佔4個位元組,則最大的有符號整數是2 31 1,最小的是 2 31 c 版本 include using namespace std intmain python...