必定要認真看 分析 | 註釋 | 題目要求
題目描述:
HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同窗。今天測試組開完會後,他又發話了:在古老的一維模式識別中,經常須要計算連續子向量的最大和,當向量全爲正數的時候,問題很好解決。可是,若是向量中包含負數,是否應該包含某個負數,並指望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和爲8(從第0個開始,到第3個爲止)。你會不會被他忽悠住?(子向量的長度至少是1)php
分析:
這是典型的動態規劃問題 詳見動態規劃
第一種方法採用了狀態轉移方程(我也搞不太清楚)
第二種方法更爲形象
代碼以下:html
<?php function FindGreatestSumOfSubArray($array) { // write code here if($array == null){ return 0; } $max = $array[0]; $res = $array[0]; for($i=1;$i<count($array);$i++){ $max = max($max+$array[$i],$array[$i]); $res = max($res,$max); } return $res; } /** * Thinking: 假設第一個值爲最大值,再初始化一個動態值(持續加的過程,值一直在變化),若是這個動態值爲負數,則動態值重置爲當前數值(由於當前數值不管是正是負再加上一個負值只會更小),反之則連加,再將動態值與最大值比較,將較大者賦給最大值。 */ function FindGreatestSumOfSubArray($array) { if(count($array) == 0 || $array == null){ return 0; } $greateSum = $array[0]; $curSum = 0; $len = count($array); for($i = 0; $i < $len; $i++){ if($curSum <= 0){ $curSum = $array[$i]; } else{ $curSum += $array[$i]; } if($curSum > $greateSum){ $greateSum = $curSum; } } return $greateSum; }
測試地址:https://www.nowcoder.com/prac...正則表達式
題目描述:
輸入一個字符串,按字典序打印出該字符串中字符的全部排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的全部字符串abc,acb,bac,bca,cab和cba。數組
分析:
利用哈希表 每一個字符的ASCII碼做爲key函數
注1:哈希查找經常用於查找一個指定值相等的記錄 而不須要比較 注2: 如下函數不爲全排列(即不包括字符重複的狀況)
代碼以下:測試
<?php /** * @param $ar Array * @param $k int 出發序號 * @param $m int 數組單元個數 */ function perm(&$ar, $k=0, $m) { if($k == $m){ echo join('',$ar), PHP_EOL; }else{ for($i=$k; $i<=$m; $i++) { swap($ar[$k], $ar[$i]); perm($ar, $k+1, $m); swap($ar[$k], $ar[$i]); } } } function swap(&$a, &$b){ $c = $a; $a = $b; $b = $c; }
測試地址:https://www.nowcoder.com/prac...3d
題目描述:
請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 可是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。code
分析:
正則表達式htm
注:測試經過率不足100% 在此只提供一種思路
代碼以下:字符串
<?php function isNumeric($s) { // write code here $pattern = "/[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?/"; return preg_match($pattern,$s); }
測試地址:https://www.nowcoder.com/prac...
題目描述:
將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲0或者字符串不是一個合法的數值則返回0
分析:
符號 數字
代碼以下:
<?php function StrToInt($str) { // write code here $tem = array('1','2','3','4','5','6','7','8','9','0'); #預約義組成數字的元素數組 $len = strlen($str); if($len == 0)return 0; $arr = str_split($str); #將字符串轉換爲數組 $fuhao = 0; if($arr[0] == '-'){ $fuhao = 1; } $sum = 0; for($i = $fuhao; $i<$len; $i++){ if($arr[$i] == '+'){ continue; } if(!in_array($arr[$i],$tem)){ return 0; } $sum = $sum*10 + $arr[$i]; } return $fuhao == 0 ? $sum : -1*$sum; }