1.二維數組中的查找 題目描述 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 時間限制:1秒 空間限制:32768K <?php function Find($target, $ ...
1.二維數組中的查找
題目描述
在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 時間限制:1秒 空間限制:32768K<?php function Find($target, $array) { // write code here foreach($array as $k=>$v){ if(in_array($target,$v)){ return "true"; } }
return "false"; }
運行時間:281ms 占用記憶體:4252k
感悟:
這道題用PHP寫起來比較簡單,只要懂得二維數組的遍歷,以及in_array()函數的使用,不要搞錯參數位置,參數一為要查找的字元串,參數二為數組。
2.替換空格
題目描述
請實現一個函數,將一個字元串中的空格替換成“%20”。例如,當字元串為We Are Happy.則經過替換之後的字元串為We%20Are%20Happy。 時間限制:1秒 空間限制:32768K<?php function replaceSpace($str) { // write code here return str_replace(" ","%20",$str); }
運行時間:9ms 占用記憶體:2428k
感悟:
要熟悉str_replace()函數,參數一為要查找的值,參數二為替換的值,參數三為被搜索的字元串。
如果搜索的字元串是數組,那麼它將返回數組,對數組中的每個元素進行查找和替換。註意,在數組替換中,如果需要執行替換的元素少於查找到的元素的數量,那麼多餘元素將用空字元串進行替換。
3.從尾到頭列印鏈表
題目描述
輸入一個鏈表,從尾到頭列印鏈表每個節點的值。 時間限制:1秒 空間限制:32768K<?php /*class ListNode{ var $val; var $next = NULL; function __construct($x){ $this->val = $x; } }*/ function printListFromTailToHead($head) { // write code here $list = array(); while($head!=null){ $list[]=$head->val; $head=$head->next; } return array_reverse($list); }
運行時間:18ms 占用記憶體:2432k
感悟:
本題的思路為先將鏈表的值順序裝入一個空數組中,然後使用array_reverse()函數以相反的元素順序返回數組。
4.重建二叉樹
題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重覆的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 時間限制:1秒 空間限制:32768K<?php /*class TreeNode{ var $val; var $left = NULL; var $right = NULL; function __construct($val){ $this->val = $val; } }*/ function reConstructBinaryTree($pre, $vin) { // write code here if($pre && $vin){ $treeRoot = new TreeNode($pre[0]); $index = array_search($pre[0],$vin); $treeRoot->left = reConstructBinaryTree(array_slice($pre,1,$index),array_slice($vin,0,$index)); $treeRoot->right = reConstructBinaryTree(array_slice($pre,$index+1),array_slice($vin,$index+1)); return $treeRoot; } }
運行時間:35ms 占用記憶體:4204k
感悟:
本題的思路為遞歸調用reConstructBinaryTree方法來分別執行左子樹和右子樹的遍歷查找,每次都查找出根節點併進行保存。
題中使用到的函數:array_search(),在數組(參數二)中搜索某個鍵值(參數一),並返回對應的鍵名,若沒有找到,則返回false。
array_slice(),在數組中根據條件取出一段值,並返回,參數一為數組,參數二為取值的起始位置(相當於數組下標),參數三為選取的長度(可選,若不填,則取到數組結尾)。
5.用兩個棧實現隊列
題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。 時間限制:1秒 空間限制:32768K<?php $stack = array(); function mypush($node) { // write code here global $stack; return $stack[]=$node; } function mypop() { global $stack; if($stack){ return array_shift($stack); } // write code here return $stack; }
運行時間:14ms 占用記憶體:3688k
感悟:
首先要清楚隊列的Push和Pop操作的含義:push(x):將x壓入隊列的末端,pop():彈出隊列的第一個元素。
本題要點為定義全局數組$stack,其次為array_shift()函數:刪除數組中的第一個元素,並返回被刪除元素的值。
註:以上均為個人理解,如有錯誤,請提出,必改正。