PHP 尋找有序數組中和為n的數對

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();

PHP的代理模式

代理模式與父類和介面的異同相同點:代理模式的作用和父類以及介面和組合的作用類似,都是為了彙總共用部分,減少公用部分的代碼不同點:相比起父類,他們的語境不同,父類要表達的含義是 is-a, 而代理要表達的含義更接近於介面, 是

PHP 二叉樹的深度優先與廣度優先遍曆

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($

PHP 位元相加

1 <?php 2 #二進位相加 3 function binary_plus($binstr1, $binstr2) { 4 $bin_arr1 = str_split($binstr1); 5 $bin_arr2 = str_split($binstr2); 6 $arr_len1 = count($bin_arr1); 7 $arr_len2 = count($bin_arr2); 8 $

PHP 二分尋找

二分尋找需要數組有序,效率為O(logn) 1 <?php 2 #二分尋找 3 function binarySearch(Array $arr, $target) { 4 $low = 0; 5 $high = count($arr) - 1; 6 7 while($low <= $high) { 8 $mid = floor(($low + $high) / 2); 9

PHP 短串連產生

1 <?php 2 #短串連產生演算法 3 4 class Short_Url { 5 #字元表 6 public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 7 8 public static function short($url) { 9 $key =

PHP 優先隊列的實現

優先隊列其實就是一個最大堆,主要是對最大堆的操作上的一些調整 1 <?php 2 #最大優先隊列的實現 3 4 #交換函數 5 function swap(&$arr, $inx1, $inx2) { 6 $temp = $arr[$inx1]; 7 $arr[$inx1] = $arr[$inx2]; 8 $arr[$inx2] = $temp; 9 }10 11

PHP 樹的先序,中序,後序遍曆

1 <?php 2 #樹節點 3 class Node { 4 public $lc = null; #左孩子 5 public $rc = null; #右孩子 6 public $val; 7 8 public function __construct($val) { 9 $this->val = $val;10 }11 }

PHP 兩個等長有序數組求合并後的中位元

演算法思路:每次取兩個數組的中位元進行比較,我們假定取的中位元是下中位元,即每次取中位元座標時使用floor取出,當數組長度是奇數時,取得是正中間的元素,是偶數時取得就是下中位元1. a[n/2] == b[n/2],可知中位元即為a[n/2],返回即可2. a[n/2] < b[n/2],設a,b數組藍色紅色部分元素分別為a[b],a[r],b[b],b[r],可知 a[b] <= a[n/2] < b[n/2] <= b[b]於是有 a[b] <= a[r],

PHP 尋找一個在數組中出現次數超過一半的數,時間複雜度O(n),空間複雜度O(1)

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

PHP 求鏈表並集

1 <?php 2 #合并兩個非降序鏈表並去重,並且不能修改原鏈表資料 3 #非降序,則鏈表內部有可能重複 4 5 class Node { 6 public $data = null; 7 public $next = null; 8 } 9 10 function traverse($head) { 11 while ($head != null) { 12

PHP 通過數組判斷數組順序輸出是否是二叉排序樹的後序遍曆結果

1 <?php 2 #通過數組判斷該數組順序輸出是否是二叉樹後序遍曆結果 3 4 #@param a 待判斷數組 5 #@param s 待判斷開始部分 6 #@param e 待判斷結束部分 7 function is_bst_post($a, $s, $e) { 8 if ($s == $e) { 9 return true;10 }11 12

PHP 基數排序(計數排序實現)

1 <?php 2 #基數排序,此處僅對正整數進行排序,至於負數和浮點數,需要用到補碼,各位有興趣自行研究 3 4 #計數排序 5 #@param $arr 待排序數組 6 #@param $digit_num 根據第幾位元進行排序 7 function counting_sort(&$arr, $digit_num = false) { 8 if ($digit_num !==

PHP 世界上本沒有傳引用調用

曾經我一直認為,基礎資料類型都是傳值調用,而具體的類都是傳引用調用,但是,現在我認為世界上本沒有傳引用調用,所有的函數參數都是傳值調用(除了PHP的&或指標調用)為什麼這麼說,看代碼1$a = 1;test($a);echo $a;function test($a) { $a = 2; }這個不用我說,輸出的是 12$a = new Man;$a->age = 1;test($a)echo $a->age;class Man { public

PHP 跳台階問題

1 <?php 2 #跳台階問題 3 #規定跳台階有兩種跳法,一次跳1階或一次跳2階,問有n個台階共有幾種跳法 4 #如果n=1,則只有一種跳法,n=2有兩種跳法-一次跳1階,一次跳2階 5 #如果n > 2時,可以分為兩種情況,第一種是第一次跳1階,那麼剩下的跳法就是f(n - 1)種了 6 #第二種是第一次跳2階,那麼剩下的跳法就是f(n - 2)種,則f(n) = f(n - 1) + f(n - 2) 7 #於是有遞推公式 8

PHP 括弧配對判斷及修正

1 <?php 2 #判斷輸入的括弧序列是否合法 3 #解決思路,如果在某一段出現了右括弧數比左括弧數大,則非法,否則到最後判斷左括弧和右括弧是否相等即可 4 define("LEFT", "("); 5 define("RIGHT", ")"); 6 7 function validate($seq) { 8 $len = strlen($seq); 9 $left = 0;10 $right =

PHP 尋找數組第i小元素

1 <?php 2 #隨機播放第i小的數字,用隨機快排實現 3 4 #交換元素 5 function swap(&$arr, $i, $j) { 6 $temp = $arr[$i]; 7 $arr[$i] = $arr[$j]; 8 $arr[$j] = $temp; 9 }10 11 #隨機劃分12 function

PHP a[n+1]共有n+1個數,數值範圍是1~n,a中有1個數重複,其他各不相同,找出這個重複的數

1 <?php 2 #a[n+1]共有n+1個數,數值範圍是1~n,a中有1個數重複,其他各不相同,找出這個相同的數 3 4 #第一種方法,利用 a數組的和減去1+2+3+...+n的和,得到的結果就是重複數字 5 function get_dup($a) { 6 $size = count($a); 7 $suma = 0; 8 $sumn = 0; 9 for ($i = 0; $i

PHP 輸入n,判斷從1~n序列中十進位數裡1出現的次數

1 <?php 2 #輸入n,判斷從1~n序列中十進位數裡1出現的次數 3 #例如輸入12,則含有1的數字有1,10,11,12, 這裡1一共出現了5次 4 5 #判斷十進位數出現1的次數 6 function count1dec($x) { 7 $i = 1; 8 $count = 0; 9 10 #從個位元開始擷取x的每一位元,並判斷是不是111 while ($x >=

PHP 帶哨兵雙向隊列

1 <?php 2 #帶哨兵的雙鏈表實現 3 4 #鏈表節點 5 class Node { 6 public $pre = null; 7 public $next = null; 8 public $key = null; 9 }10 11 #尋找鏈表值12 function search($list, $key) {13 $cnode = $list->next;14

總頁數: 1662 1 .... 434 435 436 437 438 .... 1662 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.