记录所有算法相关知识。写算法时,可以先写test case,这样比较容易把握和思考。
以下算法都可以直接跑。1.冒泡算法$arr[$j]) { //这种形式比较简便易读 list($arr[$i], $arr[$j]) = array($arr[$j], $arr[$i]); } } } return $arr; }
2.快速排序。简单思路,随机挑选一个数组中的值,以它为标准,小于他的放在她的左边,大于他的放在他的右边。之后递归,最后所有的值都会排列好。
3.从两个数组中找出相同的数
$arr2[$index2]) { $index2++; } else { $container[] = $arr1[$index1]; //放入container之后,不要忘记增加index $index1++; $index2++; } } return array_unique($container);}
4.重写shuffle函数,打乱一个数组
5.分离字母和数字。一个string中有字母数字,分离并用:分割
6.约瑟夫环问题
相关题目:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把它踢出去…,如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。1) { for ($i=0;$i<$n-1;$i++) { $pop = array_shift($roundTable); array_push($roundTable, $pop); } array_shift($roundTable); } return $roundTable[0];}
7.二分法
$index) { $right = $mid - 1; } else if ($arr[$mid] < $index) { $left = $mid + 1; } else { return $mid; } } return -1;}
8.找出一组数中连续的最大和
= 0) { if ($maxSum < $currentSum) $maxSum = $currentSum; $currentSum += $arr[$i]; } else { $currentSum = $arr[$i]; } } return $maxSum;}
9.3sum. 排序好的数列,复杂度n^2。如果没有排列好,可以先用sort
left,所以不用担心i,left,right相等 while ($right > $left) { $sum = $arr[$left] + $arr[$i] + $arr[$right]; if ($sum < 0) { $left++; } else if ($sum > 0) { $right--; } else { $set = array($arr[$left], $arr[$i], $arr[$right]); $result[] = $set; //不要忘记++,否则死循环 $left++; $right--; } } } return $result;}