随笔分类 - 数据结构与算法
欧拉计划是一个程序员算法练习计划,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题。
摘要:冒泡排序算法是一个非常经典和直观的排序算法,是许多数据结构初学者入门的排序法。它是一个稳定的排序算法,所需要的空间复杂度为O(1),但是时间复杂度却是O(n^2)的,当然冒泡排序算法还存在优化的版本(后面会讲到),使得可以在一定程度上优化冒泡排序算法。 算法原理: 举个升序栗子:加入对于一个有10个
阅读全文
摘要:考察二叉树的遍历是考察一个人数据结构能力最基本的方法。我们熟知的二叉树的遍历有前序遍历、中序遍历和后序遍历。所谓的二叉树的遍历顺序的不同也只是对于根节点的访问时机的不同。所有我们只要掌握了其中一种二叉树的遍历顺序的算法也就基本上掌握了二叉树的遍历算法,故我们以二叉树的中序遍历为例做探究。 方法1:递
阅读全文
摘要:题目: 如果我们将小于10的所有是3或5倍数的自然数列出来,我们得到3,5,6和9,它们的和是23。与之类似,计算1000以下所有是3或5的倍数的自然数的和。 想法1: 第一种思路就是通过i % 3 == 0 || i % 5 == 0这个表达式筛选出所有符合要求的数,然后进行依次相加即可。这个算法
阅读全文
摘要:思路: 这道题也有好几种算法来求解,其中一个就可以用栈的方式来解决这道问题其中栈的时间复杂度杂度为O(n)。 题目会给我们一个记录高度的数组height,里面记录着每根柱子的高度。我们在遍历这个数组时创建一个栈。如果当前栈为空或者当前柱子(数组元素)高度 < 栈顶元素的高度,就将该元素入栈,直到出现
阅读全文
摘要:对于学习算法或者做一些查找题的同学来说刚开始都喜欢从头开始做遍历,这种算法的时间复杂度为O(N),这是一个普适性的算法,几乎所有的查找都可以用它,而且时间复杂度不高在我们能够接受的范围之内。但我下面介绍的是另外一个特殊的算法,它不具备普适性,它只适合查找那些已经排好序的元素并且查找的数据元素量很庞大
阅读全文
摘要://该算法的思路是利用素数筛的想法,当判定一个数为素数后它的倍数必定为合数,此时不必将其标记为1,可以将该素数直接赋给他的所有倍数,当作这些数的最小素因子,然后依次循环 例如当i=2时,经过if(prime[i])判定为零,不满足条件,则则执行下面的语句: 将2赋值给它的所有倍数,因为它将作为最小素
阅读全文
摘要:前言: 对于一个数是否为素数的求解,我相信大家并不陌生。我们都知道素数的定义是如果某一个数除了1和它本身外,没有其他的因子了,那么我们就可以判定该数为素数。大家初学时求解并列举素数时写的代码一般是下面这个样子的,该函数的时间复杂度为O(N); 代码一: #include<stdio.h> int p
阅读全文
摘要:一:顺序表的定义 顺序表是再计算机中用一组连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理内存单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序结构的线性表通常称为顺序表。 二:顺序表的优点与缺陷 顺序表由于是将数据放
阅读全文

浙公网安备 33010602011771号