题目描述: 解题思路:   判断一个单向链表是否是回文链表,并且要求O(n)的时间复杂度和O(1)的空间复杂度。   方法有以下几种:   1、遍历整个链表,将链表每个节点的值记录在数组中,再判断数组是不是一个回文数组,时间复杂度为O(n),但空间复杂度也为O(n),不满足空间复杂度要求。   2
题目描述: 解题思路:   求回文数,并且要求不能使用额外的空间。思路很简单,算出x的倒置数reverse,比较reverse是否和x相等就行了。 Java代码:   1 public class LeetCode9 { 2 public static void main(Strin
  本篇口胡写给我自己这样的老是证错东西的口胡选手 以及那些想学支配树,又不想啃论文原文的人…   大概会讲的东西是求支配树时需要用到的一些性质,以及构造支配树的算法实现…   最后讲一下把只有路径压缩的并查集卡到$O(m log n)$上界的办法作为小彩蛋…   1、基本介绍 支配树 Domina
(1) 最小堆算法 首先将数组的前(n+1)/2个元素建立一个最小堆。 然后,对于下一个元素,和堆顶的元素比较,如果小于等于,丢弃之,接着看下一个元素。如果大于,则用该元素取代堆顶,再调整堆,接着看下一个元素。重复这个步骤,直到数组为空。 当数组都遍历完了,那么,堆顶的元素即是中位数。 1 #i
  线性表是n个数据元素的有限序列,数据之间存在顺序关系,一般同一个线性表属于同一类数据对象(例如A~Z的字母表)。线性表存在唯一一个首位元素和末位元素,除了第一个元素和最后一个元素,每个元素存在着一个前驱和一个后继(A的后继是B,B的前驱是A)。线性表主要有顺序表和链表两种存储形式,线性表是一种逻
目录 1 问题描述 2 解决方案 2.1 贪心法   1 问题描述 何为Prim算法? 此处引用网友博客中一段介绍(PS:个人感觉网友的这篇博客对于Prim算法讲解的很清楚,本文与之相区别的地方在于具体实现
题目描述: 解题思路:   反转的方法很简单,重点在于判断溢出的问题,下面给出了两种方法。 Java代码: 方法一:   判断溢出方法:在执行完int newResult=result*10+tail语句后,紧接着进行逆运算result=(newResult-tail)/10,如果出现溢出,那么逆
之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录。    1.排序算法时间复杂度、稳定性分类: 2.排序算法问题描述与实现 2.1冒泡排序(交换排序-稳定) 【问题描述
算法原理 每次扩展一个距离最小的点,再更新与其相邻的点的距离。 如何寻找距离最小的点 普通的Dijkstra算法的思路是直接For i: 1 to n 优化方案是建一个小根堆,小根堆里存储由当前结点更新距离的所有点,那么堆顶就是距离最小的点 如何寻找与源点相邻的点 当然是邻接表 具体实现 建一个小根
问题描述   生成n个∈[a,b]的随机整数,输出它们的和为x的概率。 输入格式   一行输入四个整数依次为n,a,b,x,用空格分隔。 输出格式   输出一行包含一个小数位和为x的概率,小数点后保留四位小数 样例输入
目录 1 问题描述 2 解决方案   1 问题描述 现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球、白球、蓝球。这个问题之所以叫荷兰国旗,是因为将红白蓝三色的小球弄成条状
目录 1 问题描述 2 解决方案 2.1 动态规划法   1 问题描述 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格。每一步,机器人
感觉两个队列实现栈 比 两个栈实现队列 麻烦   1.栈为空:当两个队列都为空的时候,栈为空   2.入栈操作:当队列2为空的时候,将元素入队到队列1;当队列1位空的时候,将元素入队到队列2;   如果队列1 和 队列2 都为空的时候,那就选择入队到队列1.   3.出队操作:当两个队列都为空的时候
冒泡排序 算法原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 1 static vo

推荐文章