![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
抬山
平平无奇程序猿
展开
-
Java实现二叉树的遍历
什么是二叉树? 定义:二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。 那什么是遍历? 遍历:所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。 二叉树的遍历方式有以下几种: 1.前序遍历:先访问根节点——左子树——右子树。 2.中序遍历:先访问左子树——根节点——右子树,按照这个顺序。 3.后序遍历:和前面差不多,先访问树...原创 2019-11-10 23:42:30 · 442 阅读 · 0 评论 -
[100天每天一个算法--第13天] 杨辉三角
题目来源:leetcode 118.杨辉三角 https://leetcode-cn.com/problems/pascals-triangle/ 题目: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,...原创 2018-10-06 19:40:03 · 381 阅读 · 0 评论 -
[100天每天一个算法--第10天] 求两数之和
问题描述如下: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 方法一:暴力求解 直接两层for循环,遍历每个元素 x,并查找是否存在一个值与 tar...原创 2018-09-22 15:30:51 · 215 阅读 · 0 评论 -
[100天每天一个算法--第12天] PHP实现归并排序算法
摘自百度百科: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序 代码如下: <?php /* 归并排序 */ function MergeSort(&$arr = array()) { $s...原创 2018-10-02 22:25:15 · 223 阅读 · 0 评论 -
[100天每天一个算法--第11天] 最长公共前缀
问题描述: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示例 2: 输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 思路:以列表第一个元素为主,采用纵向扫描(即从第一...原创 2018-10-01 10:42:02 · 292 阅读 · 0 评论 -
[100天每天一个算法--第9天] PHP实现直接插入排序
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。 逻辑比较简单,这里博主直接贴代码供大家参考 php实现代码如下: <?php /*直接插入排序*/ $arr = [2,4,6,3,1,5,7,9,8]; print_arr($arr);//排序前 insertso...原创 2018-09-18 17:46:31 · 413 阅读 · 0 评论 -
[100天每天一个算法--第6天] 有效的括号
&lt;?php /* 朴素贝叶斯算法 */ class Type { const POSITIVE = 'positive'; const NEGATIVE = 'negative'; } class Classifier { private $types = [Type::POSITIVE, Type::NEGATIVE]; private $word...原创 2018-08-17 16:44:01 · 197 阅读 · 0 评论 -
[100天每天一个算法--第8天] PHP实现双向队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 双向队列呢?顾名思义就是头尾都可以进行插入删除操作的队列 PHP代码实现如下: <?php /** * Class Deque * 使用PHP实现双向队列 */ cla...原创 2018-08-19 21:36:51 · 177 阅读 · 0 评论 -
[100天每天一个算法--第5天] 二分查找算法
二分查找又称折半查找,是一种效率比较高的查找算法,但是它也有它的局限,即线性表必须采用顺序存储结构,而且表中元素按关键字有序排 实现原理: 假设表中元素是按升序排列,取表中间位置记录的元素与要查找的元素比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的元素大于查找元素,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录...原创 2018-08-16 22:40:21 · 221 阅读 · 0 评论 -
[100天每天一个算法--第7天] 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路一: 每个数组的长度相同,每一行从左到右递增,每一列从上到下递增,那么我们可以从这入手,设二维数组的高度即一维数组数目为height,每一个一维数组宽度为weight,从二维数组左下角的...原创 2018-08-18 20:39:32 · 121 阅读 · 0 评论 -
[100天每天一个算法--第2天] 快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 假设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数,当然选中间值也行)作为关键数据,...原创 2018-08-13 20:55:41 · 348 阅读 · 0 评论 -
[100天每天一个算法--第4天] 堆排序(最大堆)
写在前面: 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 定义:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一...原创 2018-08-15 23:31:35 · 223 阅读 · 0 评论 -
[100天每天一个算法--第1天] 背包算法
其实PHP程序员需不需要学算法,要不要深挖算法,一直没个定论。博主本人准大四,在找实习的过程中逐渐发现学习算法的重要性,博主以前在学校的工作室老大说过一句话,熟悉算法,可以让你的天花板更高一些,所以便有了这个博客系列,每天一个算法来由简到难逐步提升自己的编程能力。 今天博主想讲一下背包算法.。 由一道题开始,情景如下: 0-1背包问题: n个物品和1个背包,每个物品i对应的重量为...原创 2018-08-12 21:06:04 · 13460 阅读 · 0 评论 -
[100天每天一个算法--第3天] 冒泡排序
冒泡排序是算法中一个入门算法,比较简单 摘自百度百科 算法描述:重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气...原创 2018-08-14 18:25:03 · 209 阅读 · 0 评论