-
[PHP] 算法-数组中出现次数超过一半的数字的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:113
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。两种方式:1.定义一个新数组arr,遍历数组给arr赋值,arr[[详细]
-
[PHP] 算法-把数组排成最小的数的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:79
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解法11.数组排序,使用自定义排序规则是 a.bb.a a 和 b互换位置2.usort函数的使用fu[详细]
-
[PHP] 算法-删除链表中重复的结点的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:84
删除链表中重复的结点:1.定义两个指针pre和current2.两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的3.pre指针next直接指向current指针的后一个,把相同的都跳过pre=linkListcurrent=linkListwhile current!=nullif c[详细]
-
[PHP] 算法-找出两个链表的第一个公共结点的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:193
输入两个链表,找出它们的第一个公共结点1.两个单链表,有公共结点,那么必然,尾部公用2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值3.长的链表先走n步,两个链表再同时移动4.两个链表相交点就是第一个公共结点list1 list2len1 len2[详细]
-
[PHP] 算法-二位有序数组中查找的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:160
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1.二维数组,行row从左到右递增,列col从上到下递增[详细]
-
[PHP] 算法-有序数组旋转后寻找最小值的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:64
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回[详细]
-
[PHP] 算法-复制复杂链表的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:125
复杂链表的复制:1.在旧链表中每个结点的后面复制出一个结点,隔代2.把旧链表的随机指向部分,复制到新添加的结点上3.把新结点从旧链表中拆分出来成新链表1.linklist=headwhile linklist!=nullnode=new Node()node-next=linklist-nextlinklist-next=nodelinkl[详细]
-
[PHP] 算法-合并两个有序链表为一个有序链表的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:112
合并两个有序的链表为一个有序的链表:类似归并排序中合并两个数组的部分1.遍历链表1和链表2,比较链表1和2中的元素大小2.如果链表1结点大于链表2的结点,该结点放入第三方链表3.链表1往下走一步,反之亦如此4.当两个链表中有一个结束了以后,另一个链表就可[详细]
-
[PHP]算法-最大子数组问题思路
所属栏目:[PHP] 日期:2020-05-25 热度:181
最大子数组问题,股票价格示例:1.在最高价格开始向左寻找之前的最低价格2.在最低价格开始向右寻找之后的最高价格3.暴力求解法,尝试每队可能的买进和卖出组合,保证卖出在买进之后keybuysellfor i=0;in;i++for j=i+1;jn;j++p=key=arr[j]-arr[i]if !key key=p[详细]
-
[PHP] 数据结构-反转链表PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:90
1.常见方法分为迭代和递归,迭代是从头到尾,递归是从尾到头2.设置两个指针,old和new,每一项添加在new的后面,新链表头指针指向新的链表头3.old-next不能直接指向new,而是应该设置一个临时指针tmp,指向old-next指向的地址空间,保存原链表数据,然后old-next指向ne[详细]
-
[PHP] 算法-数组归并排序并计算逆序对的个数的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:85
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%10000000071.数组归并排序2.归并排序比较左右两个堆数组中的元素大小时,进行计[详细]
-
[PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:93
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。1.前序遍历是中,左,右;中序遍历是左,[详细]
-
[PHP] 算法-构建排除当前元素的乘积数组的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:154
构建乘积数组给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。1. 这题的意思是 B数组的元素是A数组中所有元素的乘积,但是要排除掉当前元素2. A数组在i元素左右分成两部[详细]
-
[PHP]算法-替换空格的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:101
替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:1.先循环一遍,找出该字符串中 空格的个数count2.因为要把 空格替换成 %20,所以,要倒着数,最后一个空[详细]
-
[PHP]算法-二叉树中和为某一值的路径的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:122
二叉树中和为某一值的路径:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:1.二叉树的前序[详细]
-
[PHP]算法-拼接最小字典序的实现
所属栏目:[PHP] 日期:2020-05-25 热度:126
拼接最小字典序:给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的并放回这个大字符串。思路:1.字典序,12345这五个数,按不同的顺序排列,所有的排列中最前面的是12345,最后面的是[详细]
-
[PHP]算法-队列结构的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:156
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:1.php数组完全就能实现2.array_push 从尾部往里压入元素3.array_shift 从头部删除元素$list=array();array_push($list,$node);array_shift($list);?php$list=array([详细]
-
[PHP]算法-跳台阶问题的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:179
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:1.找规律 f(1)=1 f(2)=2 f(3)=3 f(4)=5 f(n)=f(n-1)+f(n-2)这是一个斐波那契数列2.因为调到第n个台阶时,倒数第一个台阶可以一[详细]
-
[PHP] 算法-邻接矩阵图的广度和深度优先遍历的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:67
1.图的深度优先遍历类似前序遍历,图的广度优先类似树的层序遍历2.将图进行变形,根据顶点和边的关系进行层次划分,使用队列来进行遍历3.广度优先遍历的关键点是使用一个队列来把当前结点的所有下一级关联点存进去,依次进行邻接矩阵的广度优先遍历:BFS(G)for i=0[详细]
-
[PHP] 算法-镜像二叉树的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:76
操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树8/6 10/ /5 7 9 11镜像二叉树8/10 6/ /11 9 7 5思路:1.左子树赋给temp2.temp赋给右子树3.右子树赋给左子树4.递归mirror(root)temp=root-leftroot-left=root-rightroot-right=tempmir[详细]
-
[PHP]算法- 二叉树的深度的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:175
二叉树的深度:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:1.非递归层序遍历2.使用辅助队列,根结点先入队列3. 循环判断队列是否为空,如果不为空就继续循环队列里面[详细]
-
[PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:88
二叉搜索树的后序遍历序列:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:1.后序遍历是 左右中 , 最后一个元素是根结点2.二叉搜索树,左子树=根结点=右子[详细]
-
[PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:125
统计一个数字在排序数组中出现的次数。1.有序的数组查找,使用二分法2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1left=getLeft(data,k)right=getRight(data,k)retun right-left+1getLeft data,kleft=0right=arr.length-1mid=[详细]
-
[PHP] 算法-数组重复数字统计的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:107
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2[详细]
-
[PHP] 算法-快速排序的PHP实现
所属栏目:[PHP] 日期:2020-05-25 热度:176
快速排序:1.基于二分的思想2.第一个作为基准数,左右各一个指针,同时扫描,右边先走,找到比基准数小的停下左边再走,找到比基准数大的停下,左右交换3.当左右相遇的时候,把当前的和基准数调换,递归调用4.快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它[详细]

浙公网安备 33038102330553号