
算法
你的酒窝里有酒
加油!!!
展开
-
二叉树题目练习
求一棵二叉树的最大高度public static int getDepth(Node root){ if(root == null){ return 0; } int leftMax = getDepth(root.left); int rightMax = getDepth(root.right); return Math.max(lef...原创 2019-06-03 18:15:33 · 281 阅读 · 0 评论 -
二叉树层序遍历的变种问题
二叉树层序遍历的变种问题1、按层打印二叉树,按层换行分析:本质还是在考二叉树的层序遍历,问题的关键是啥时候换行。维护两个Node类型的遍历last(当前行的最右结点),nlast(下一行的最右结点)。当队列中弹出的值等于last的时候就知道该换行了,同时更新last就ok了。Java代码:import java.util.LinkedList;import java.util.Queue...原创 2019-06-01 10:52:57 · 596 阅读 · 0 评论 -
【LeetCode622】设计环形队列
【LeetCode622】设计环形队列题目描述提交结果代码实现class MyCircularQueue { private int size ; private int head ; private int tail ; private int[] arr; /** Initialize your data structure here. Se...原创 2019-05-25 11:28:24 · 340 阅读 · 0 评论 -
【LeetCode225】队列实现栈
队列实现栈题目要求:提交结果:问题分析举例说明; 1 2 3 4 5 入队列A将A队列的内容弹出,给A队列中仅留一个数据,将弹出的数据 入队列B。即A中剩5,B中为1,2,3,4。将5 出队,就是第一次pop的结果。然后再将B队列中的 1 2 3 入队列A 从B队列中弹出4,第二次pop的结果就这样来回倒即可。其实实际写代码的时候,不必来回倒,只需要将两个队列的引用交换一...原创 2019-05-24 18:30:51 · 176 阅读 · 0 评论 -
【LeetCode232】双栈实现队列
双栈实现队列题目要求提交结果题目分析栈;先进后出队列:先进先出根据“负负得正”的原理,所有可以使用双栈实现队列。比如:入栈A: 1 2 3将栈A的所有数据弹出入栈B: 3,2,1再从B中弹出,最终结果为 1 2 3和初始顺序一样符合题目要求具体代码依赖两个栈,push存入的数据在push栈中,从pop栈中弹出数据。private Stack...原创 2019-05-24 17:40:07 · 179 阅读 · 0 评论 -
判断一棵二叉树是否为二叉搜索树
判断一棵二叉树是否为二叉搜索树二叉搜索树定义二叉搜索树(Binary Search Tree)(又:二叉查找树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。简单而言:每一个结点的左子树结点都比当前结点小,每一个结点的右子树结点都比当前结点大。思路一...原创 2019-05-09 22:12:15 · 5837 阅读 · 2 评论 -
二叉树的非递归遍历
二叉树的非递归遍历先序遍历:根结点 左子树 右子树借助一个栈。主要步骤:头结点不为null,入栈。迭代条件,栈不为空。弹出栈顶结点,弹出就打印有右先压右,有左再压左(先压弹出结点的右结点,再压弹出结点的左结点)代码:public static void preOrderUnR(Node root) { if(root == null){ retur...原创 2019-04-24 10:32:52 · 232 阅读 · 0 评论 -
输出字符串的全排列
题目描述给定一个字符串,输出该字符串中所有字符的全排列。给定字符串如: “ABC“全排列则为”ABC“,“ACB”,BAC",“BCA”,"CAB,“CBA”问题分析从字符串中,依次选取一个字符作为第一个字符,然后对剩下的字符串进行全排列。依次类推,直至剩下的字符串仅有一个字符时,就不需要往下分解了,因为一个元素的全排列就是它本身。这是一个典型的递归过程。图示如下:代码实现主体...原创 2019-04-08 16:36:57 · 4931 阅读 · 1 评论 -
【LeetCode148】链表排序
题目描述:原创 2019-03-24 20:05:58 · 298 阅读 · 0 评论 -
【LeetCode876】找链表的中间结点
题目描述:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1输入:[1,2,3,4,5]输出:此列表中的结点 3 示例 2:示例 2输入:[1,2,3,4,5,6]输出:此列表中的结点 4提交结果:解法一 : 两次遍历核心思想:遍历第一编,统计出链表的结点个数计算中间结点的位置遍历第二遍,找中间结点...原创 2019-03-23 19:02:31 · 258 阅读 · 0 评论 -
【LeetCode21】合并两个有序链表(循环 + 递归)
题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4提交结果:循环解法(类似归并排序的merge过程)核心思想:创建一个新的头节点作为合并后的链表dummyHead。定义两个指针cur...原创 2019-03-22 19:38:50 · 1062 阅读 · 0 评论 -
【LeetCode206】 反转单链表(循环 + 递归)
题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL三指针法(循环)核心思想设立三个指针 ,依次完成反转,在反转之前需要存储下一个结点的地址,否则后面的结点会丢失。cur 指针 : 待反转的链表结点next指针 : 存储反转结点的下一个结点即ne...原创 2019-03-21 12:12:47 · 2817 阅读 · 0 评论 -
快速排序及优化(从单路快排到三路快排)
单路快排核心思想(partition)选取一个元素作为基准值,将小于基准值的元素放在基准值左边,将大于或者等于基准值的元素放在基准值右边。然后采用分治加递归的方式对处理子数组,直至数组不能再划分。主体代码:private static void quickSort(int[] arr,int l,int r){ if(l > r){ return; }...原创 2019-03-14 20:59:48 · 459 阅读 · 0 评论 -
循环链表遍历的猫腻
循环链表循环链表的结构和单链表结构一样,只是单链表的尾结点的next指针指向null,循环链表的尾结点的next指针指向头节点,仅此而已。图示:循环链表的其它操作同单链表,但对于遍历循环链表就有一些小技巧了。循环链表的遍历第一种:public static void printList(Node head){ Node cur = head; while(cur....原创 2019-03-08 16:44:27 · 2847 阅读 · 2 评论 -
数据结构 -------单链表(Java实现)
基本组成链表是由一个个的结点组成,结点由数据域和指针域组成,数据域存放该节点的数据,指针域存放下一个结点的地址,整体链在一起呈一个链式结构,因此称为链表。对于链表仅需要知道链表的头节点就可以访问到其后的每一个元素。结构如图所示:代码实现:class Node{ private int data; // 数据域 private Node next; //指针域(地...原创 2019-03-04 19:47:06 · 329 阅读 · 1 评论 -
归并排序之小和问题
问题描述:在一个整型数组中每一个数左边比当前数小的数累加起来称为该数组的小和。如 {1,3,5,4,2};1的左边比1小的数: 没有3的左边比3小的数: 15的左边比5小的数: 1 ,34的左边比4小的数: 1,32的左边比2小的数: 1因此该数组的小和为: 1+1+3+3+1+1 = 10.暴力解法 ----- 遍历求解依次遍历,满足要求时求和Java代码如下:pack...原创 2019-01-19 18:06:10 · 363 阅读 · 0 评论