
Algorithm
Arno_好久不见
一个热衷于前端开发的 PHP 攻城狮
展开
-
蛇形矩阵,回环矩阵,数字螺旋矩阵的PHP实现
回环矩阵指的是一个从一开始,不断按照上、右、下、左顺序依次增大的矩阵序列,例: 1 2 3 8 9 4 7 6 5 现在要求: 输入: m、n,分别代表行数和列数 输出: m * n 的回环矩阵例:输入:7 8输出:1 2 3 4 5 6 7 8 26 27 28 29 30 31 32 9 25 44 45 46 47 48 33 10 24 43 54 57原创 2016-04-04 10:29:13 · 2825 阅读 · 0 评论 -
PHP实现 Manacher 最大回文子串算法
题目:给一个字符串,找出它的最长的回文子序列的长度。 例如,如果给定的序列是“BBABCBCAB”,则输出应该是7,“BABCBAB”是在它的最长回文子序列。输入:aaaa1212asdfdsa1144121输出:47这里我们还是将其封装成函数调用何谓回文序列回文序列就是正向和反向完全一样的序列,比如 asdfdsa 和 aaaa 接下来我们由浅及深,一步一步来说一下 Manacher 算原创 2016-04-05 11:51:33 · 2158 阅读 · 0 评论 -
LCS算法&最大公共子串&最长公共子序列 PHP 实现
求两个字符串的最大公共子串&最长公共子序列输入:abcbdabbdcaba4 即 bdcaba 与 abcbdab 的最大公共子串长度为 4 常规思路枚举法,算出两个字符串的所有子序列,然后分别作比较,选出最大的一个子串 缺点:对于一个长度为 n 的字符串,子串个数有 2 的 n 次方个,然后在依次比较两个字符串的子串,效率过低动态规划 LCS算法以动态规划的思想来解这个题,我们用一原创 2016-04-07 18:44:20 · 2738 阅读 · 0 评论 -
单链表反转
问题很简单,只要你静下心来想,很容易实现,中间逻辑不弄错就行所以这里我们就不画图来解释了首先,我们用 current,nextNode,third 分别表示 当前节点,当前节点的下一个节点,相对于当前节点的下下一个节点 也就是说 nextNode = current->next; third = nextNode->next;接下来我们继续: 存储当前节点(第一个)的next,原创 2016-04-12 21:03:49 · 577 阅读 · 0 评论 -
异或运算实现两个整数的交换
异或运算符大家都知道,这里用到的是: 任何数与 0 异或结果为它本身: a ^ 0 = a 任何数与自己异或结果为 0 : a ^ a = 0所有就有了以下的方法: void swap(int &a, int &b) { tmp = a ^ b; b = b ^ tmp; a = a ^ tmp; }其中就原创 2016-04-12 21:31:31 · 1170 阅读 · 1 评论 -
现在有N个数字,其中只有一个数字出现的次数是奇数次,如何找到这个数字?
至少要全部过一遍,遍历或是其他什么的 然后依次进行异或,最后结果就是那个数字了 例: // 示例数组 $arr = array(1, 2, 2, 3, 1, 3, 4, 5, 5); // 0与任何数异或都是其本身 $res = 0; foreach ($arr as $value) { // 相同两个数异或结果为0原创 2016-03-27 16:12:45 · 2365 阅读 · 0 评论 -
几个简单的算法实现(冒泡优化)
我们来说几个高频出现的面试问题,之前的单链表反转算一个,排序也是热门算法传统冒泡算法时间复杂度为O(n^2),最佳情况为O(n)但是中间仍然做了不少多余的比较现在我们通过来记录最后一次比较位置来进行优化,减少了一些不必要的比较操作void bubble(int a[], int n){ int i = n - 1; int pos, j, tmp; while(i > 0)原创 2016-04-17 20:13:45 · 896 阅读 · 0 评论 -
几个简单的算法实现(辗转相除)
想来这个大家应该都知道,是计算最大公约数的算法,也叫欧几里德算法所以这里就不多说了递归实现int gcd(int a, int b){ if (a < b) std::swap(a, b); return b == 0 ? a : gcd(b, a % b);}循环实现int gcd(int a, int b){ int res; while(b原创 2016-04-17 20:27:38 · 769 阅读 · 0 评论