![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
佛西先森
本科毕业于北京航空航天大学,研究生在澳大利亚墨尔本大学,2017年毕业后就职于小米担任软件工程师到现在
展开
-
二叉树遍历方法大全(包含莫里斯遍历)
前言二叉树的遍历可能大家都比较熟悉了,这篇文章主要介绍了三种二叉树的遍历方法——递归、迭代和莫里斯遍历,他们各自有各自的特点。其中最重要的是莫里斯遍历,相对于前两种方法比较少见,只需要固定的空间就可以完成迭代遍历。这篇文章将会结合动图,带你了解关于树遍历的知识。简介我们通常希望通过访问树的每个节点来处理二叉树,每次执行特定的操作,例如打印节点的内容、得到树的所有节点的总和或者要找到最大的值。...原创 2020-04-08 23:31:32 · 690 阅读 · 1 评论 -
世界上最快的排序算法——Timsort
Timsort前言简介算法限制二分插入排序Run合并合并条件合并内存消耗加速合并GALLOP模式总结参考前言经过60多年的发展,科学家和工程师们发明了很多排序算法,有基本的插入算法,也有相对高效的归并排序算法等,他们各有各的特点,比如归并排序性能稳定、堆排序空间消耗小等等。但是这些算法也有自己的局限性比如快速排序最坏情况和冒泡算法一样,归并排序需要消耗的空间最多,插入排序平均情况的时间复杂度太...原创 2020-03-29 18:14:32 · 1841 阅读 · 0 评论 -
十二种排序(冒泡、插入、归并、快速排序等包含希尔和计数排序)
前言排序算法在计算机科学入门课程中很普遍,在学习排序算法的时候,涉及到大量的各种核心算法概念,例如大O表示法,分治法,堆和二叉树之类的数据结构,随机算法,最佳、最差和平均情况分析,时空权衡以及上限和下限,本文就介绍了十二种排序算法供大家学习。简介排序算法是用来根据元素对应的比较运算符重新排列给定的数组的算法,输出的数组是一个根据比较符从小到大或者从大到小依次排列的数组。比较运算符是用于确定相...原创 2020-03-26 12:21:25 · 480 阅读 · 1 评论 -
leetcode实战—位运算(两数相除、只出现一次的数字、重复的DNA序列等)
位运算前言简介371 两整数之和29 两数相除191. 位1的个数268 缺失数字136 只出现一次的数字137 只出现一次的数字 II260 只出现一次的数字 III338 比特位计数187 重复的DNA序列总结参考前言对0和1的操作是计算机最底层的操作,所有的程序不管用什么语言写的,都要转化成机器能够读懂的语言也就是二进制进行基本的运算,而这些基本的运算就是我们今天要讲到的位运算。因为硬件...原创 2020-03-15 18:03:09 · 424 阅读 · 0 评论 -
leetcode实战—素数(埃拉托色尼筛选法包括证明、哈希、RSA)
前言素数这个概念人类已经研究了上千年,但是的具体的起源却不得而知。早在公元前300年,欧几里得就在他的著作元素中证明了有无穷多个素数,同时也证明了任何一个整数都能够被某一个素数整除。时至今日,素数在计算机科学这样一个和数学联系紧密的学科中也有这个广泛的应用,比如布隆过滤器、伪随机数、RSA加密算法等等,所以掌握素数的特性以及应用能够帮助我们解决不少实际问题。简介素数(又称质数)是一个只能被1...原创 2020-03-07 22:17:18 · 820 阅读 · 0 评论 -
leetcode实战——二分搜索及其变形(寻找左右边界、查找插入位置)
二分查找前言说到二分查找很多人都是耳熟能详,这个算法基本是每个工科生(不仅仅是计算机相关专业)的必备知识点,在各种算法的题目中出现的频率也是极高的。然而很多考题并不会简简单单的去让你实现是个二分算法,而是通过各种变形来考验同学们对二分查找算法的理解程度,比如在在排序数组中查找元素的第一个和最后一个位置以及数组中的第K个最大元素这两道题里面就要用到二分搜索来寻找边界点和逼近最后的正确答案。我猜大...原创 2020-02-26 22:23:30 · 1125 阅读 · 0 评论 -
leetcode实战——300. 最长上升子序列(动态规划+分治法)
300. 最长上升子序列题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2)O(n^2)O(n2) 。思路首先看到这道题,刷题...原创 2020-02-16 20:05:04 · 544 阅读 · 0 评论 -
LeetCode实战——股票问题六道题通解的详细解释与实际案例分析
买卖股票的最佳时机这是一个系列的题目,核心的解体思路是使用动态规划找到最优解121 买卖股票的最佳时机(简单)122 买卖股票的最佳时机 II(简单)123 买卖股票的最佳时机 III(困难)188 买卖股票的最佳时机 IV(困难)309 最佳买卖股票时机含冷冻期(中等)714 买卖股票的最佳时机含手续费(中等)对于每个问题,都有很多的文章解释了如何解决。但是,大多数解体思路都...原创 2020-02-10 22:58:07 · 410 阅读 · 0 评论 -
leetcode实战——最大子序列的和(动态规划,分治法,Kadane算法)
这个题目需要使用到动态规划,还不清楚什么是动态规划的同学,可以看我的另一篇文章的解释题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为...原创 2020-02-08 17:48:25 · 1689 阅读 · 1 评论