![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 68
cherrybomb1994
但行好事,莫问前程
展开
-
队列 堆栈
一、队列和堆栈的简单介绍1.1、队列的基本概念队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出!如下图所示:1.2、堆栈的基本概念堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出!如下图所示:二、 在JavaScript中实现队列和堆栈在JavaScript中实现队列和数组主要是通过数组,js数组中提供了以下几个方转载 2017-04-02 11:48:28 · 410 阅读 · 0 评论 -
翻转部分单向链表
题目:给定一个头结点head,以及两个整数from,to,在单链表上翻转第from个到第to个节点思路:可能存在换头的状态,例如1->2->3, from=1,to= 3,最后头结点会变,为3->2->1。所以要提前判断一下有没有换头的情况发生,即from,to与链表首尾长度的关系。 接下来要找到from-1,与to+1个节点。其实如果from-1==null就说明了会出...原创 2018-04-03 21:31:52 · 847 阅读 · 0 评论 -
删除链表的中间节点 / 删除链表a/b处的节点
一、删除中间节点:要求:删除中间节点的函数思路:本题并不是让你取得中间位节点,而是删除,所以关键是取得中间点的前一位。正常取中值用快慢指针,head.next,与,head.next.next。所以我们需要把慢指针前移一位,就变成了headpublic class text { public Node deleteMid(Node head) { if(head==null||h...原创 2018-04-03 15:45:04 · 1226 阅读 · 0 评论 -
计算1^1+2^2+3^3+4^4+5^5+……+20^20 ,大数运算(加,乘)java实现
这个题目是明显的大数运算,不能直接使用int long double 早就超出范围了,要用数组结合字符串进行处理,分别实现大数的加法和乘法,然后使用实现的加法和乘法写出来n的n次幂的实现,最后 把它们加起来首先存进来就是要用string来存贮,运算的时候按位运算,charAt(i)-'0'来取值。注意一点,string改成char[]数组的时候要变成反序操作,因为对于一个数组是要从左到右,相加放值...转载 2018-03-26 14:49:30 · 3480 阅读 · 2 评论 -
打印两个有序链表的公共部分
要求:给出两个有序单链表的头结点 head1,head2,打印两个链表公共部分思路:因为已经有序,所以直接比较值大小,若1小,1后移,2小,2后移,相等,打印,二者一起后移,继续比较。public void printCommomPart(Node head1,Node head2) { while(head1!=null&&head2!=null) { if...原创 2018-03-25 17:13:43 · 251 阅读 · 0 评论 -
构造数组的MaxTree
要求:给定一个无序的,无重复元素的数组,生成MaxTree,要求每一个根节点处为当前最大值 时间复杂度要求O(n),空间复杂度O(n)思路:一开始第一个想法是排序,在生成二叉排序树之类的,堆排序递归之类的,但是题目要求了时间复杂度为O(n),这些方 法都超了。但是题目没有要求生成的MaxTree一定为完全二叉树之类的,只要符合根节点最大,所以,我们可以自己规定MaxTree的特...原创 2018-03-25 16:29:54 · 372 阅读 · 0 评论 -
滑动窗口中的最大值
要求:输入整形数组arr,与窗口大小w。窗口从左滑至最右,输出一个数组,里面每个值代表每种窗口中的最大值思路:1、剑指offer中也有,思路是维护一个双端队列作为窗口。队列中放的是元素标号!!而非元素值!!因为后续要检查者队列长度有没有超过w,直接看队列头的编号与当前比较值的编号差值即可。 2、若当前值大于队列中的某些元素,循环removeLast,并将当前值放入(addLast)。此外还要判断这...原创 2018-03-25 13:42:28 · 1056 阅读 · 0 评论 -
用一个辅助栈,来实现另一个栈的排序
要求:将一个栈按从顶到底,从大到小的顺序排序,只许额外申请一个栈来操作思路:如果stack,pop出来的元素比help栈顶小,直接压入。否则,help栈不断弹出元素,直到找到合适的地方再压入。总结:善于总结操作,不要每个情况都写一个if操作,看看内部的操作是不是都一样,一样的话可以提出来一起写。public static void sortStack(Stack<Integer> st...原创 2018-03-24 18:49:09 · 1131 阅读 · 0 评论 -
猫狗队列
要求:已知有如下的数据结构,实现一种猫狗队列,具有: add:将cat dog 插入队列 pollAll:将所有猫狗按插入顺序移除 pollDog:将所有Dog按插入顺序移除 pollCat:将所有Cat按插入顺序移除 isEmpty:查看是否为空 isDogEmpty:查看Dog元素是否为...原创 2018-03-24 18:28:03 · 227 阅读 · 0 评论 -
仅用递归函数,栈操作,来逆序一个栈
要求:一个栈依次压入1,2,3,4,5,将其reverse操作,栈内变成5,4,3,2,1。不借助其他数据结构思路:要取得每次的栈底元素,分别为1,2,3,4,5,再压入5,4,3,2,1。 如何取得栈底元素?递归pop,直至栈为空,返回递归最深的那个元素,其他的还要再压回去,否则栈就变了。注意栈底 元素return之后就不压回去了,这样下次递归的时候才能取...原创 2018-03-24 17:23:54 · 759 阅读 · 0 评论 -
两个栈组成队列
要求:编写一个类,用两个栈来实现队列的基本操作,add , poll , peek思路:一个push栈,一个pop栈。注意不用每次都更新pop栈,若pop栈里还有上次push进来剩下的,就继续用,顺序是一样的,push栈里什么都不用管,相当于队尾。pop栈的栈顶为队列头总结:return最好不要放在if-else里面,能最后单写就单独写。把判断条件尽可能合并。import java.util.*;...原创 2018-03-24 16:27:18 · 242 阅读 · 0 评论 -
设计一个有getMin功能的栈
要求:设计一个new class,实现push,pop,getMin,复杂度O(1)思路:两个栈一起用,一个做正常栈使用(normalStack),一个用于存放最小值(minStack),minStack中随着normal中的压入一起,当它为空的时候压入第一个元素,不空的时候,只压入比栈顶元素小的。pop的时候也是,如果normal中pop的比min中栈顶元素大,min不操作,若相等,一起pop更...原创 2018-03-24 16:09:47 · 141 阅读 · 0 评论 -
单链表排序----(快排+归并+插入)
public static void quicksort(Node begin,Node end){ if(begin!=end){ Node partition=getpartition(begin,end); quicksort(begin,partition); quicksort(par...原创 2018-03-22 15:42:11 · 252 阅读 · 0 评论 -
java 求二叉树的深度 / 节点总数
1.判断根节点是否为空2.递归获取左子树的深度3.递归获取右子树的深度[java] view plain copy public int hight(Node node){ if(node==null){ return 0; }else{ int i=hight(node转载 2017-09-22 10:45:48 · 3017 阅读 · 0 评论 -
java 判断一棵二叉树是否为平衡二叉树
题目:输入一棵二叉树的根节点,判断该树是不是平衡的二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差不超过1,按照定义它就是一棵平衡的二叉树。这种思路实现的代码如下:转载 2017-09-22 11:30:07 · 966 阅读 · 1 评论 -
求二叉树的深度和宽度[Java]
求二叉树的深度和宽度[Java]这个是常见的对二叉树的操作。总结一下:设节点的数据结构,如下:class TreeNode { char val; TreeNode left = null; TreeNode right = null; TreeNode(char _val) { this.val = _val; }}1.转载 2017-09-21 10:14:38 · 1155 阅读 · 0 评论 -
循环、递归、迭代、遍历
/////////////////////////////////////////////////////////////////////////////////////表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. 大部分的递归转载 2017-07-12 15:35:02 · 461 阅读 · 0 评论 -
二叉树
二叉树的概念二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接转载 2017-04-02 11:56:46 · 649 阅读 · 0 评论 -
归并排序(MergeSort)递归与非递归的实现
主要关注一下非递归版本,其实就是模拟了从长度为1的子段,不断长度翻倍,一直到最后为全长的过程。】归并的思想是: 1.将原数组首先进行两个元素为一组的排序,然后合并为四个一组,八个一组,直至合并整个数组; 2.合并两个子数组的时候,需要借助一个临时数组,用来存放当前的归并后的两个数组; 3.将临时数组复制回原数组对应的位置。代码中最后将tmp数组中的值写回原数组中。(注意归并为稳定的排...原创 2018-09-13 21:03:20 · 903 阅读 · 0 评论