摘要:
1 <?php 2 #二叉树的广度优先遍历 3 #使用一个队列实现 4 5 class Node { 6 public $data = null; 7 public $left = null; 8 public $right = null; 9 }10 11 #@param $btree 二叉树根节点12 function breadth_first_traverse($btree) {13 $traverse_data = array();14 ... 阅读全文
摘要:
1 <?php 2 #查找有序数组中和为n的数对 3 #思路是从数组两边开始找,当a[h] + a[t] == n,返回数对 4 #当a[h] + a[t] < n, h++ 5 #当a[h] + a[t] > n, t-- 6 7 function search_n($a, $n) { 8 $h = 0; 9 $t = count($a) - 1;10 $pairs = array();11 12 while ($h < $t) {13 $sum = $a[$h... 阅读全文
摘要:
1 <?php 2 #查找一个在数组中出现次数超过一半的数,时间复杂度O(n),空间复杂度O(1) 3 4 #使用b存储数组中某个数,c存储其出现次数 5 #遍历数组,如果b == a[i],则 c++; 6 #如果b != a[i], c == 0, 则 b = a[i], c = 1; 7 #如果b != a[i], c != 0, 则 c--; 8 #易知,如果一个数出现次数超过了一半,则无论其c怎么减,也不可能减到0,并被替换掉 9 #所以数组遍历完以后,b就是出现超过一半的数 10 function searc... 阅读全文
摘要:
1 <?php 2 #短连接生成算法 3 4 class Short_Url { 5 #字符表 6 public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 7 8 public static function short($url) { 9 $key = "alexis";10 $urlhash = md5($key . $url);11 ... 阅读全文
摘要:
1 <?php 2 #最大递增子序列的查找 3 function max_subincseq($a) { 4 $len = count($a); 5 $lis = array(); #lis数组用于存储当前最长子序列长度,lis[i]表示以a[i]结尾的最长递增子序列长度 6 $lis[0] = 1; 7 $max_seqlen = 1; 8 9 for ($i = 1; $i < $len; $i++) {10 $lis[$i] = 1;11 f... 阅读全文