
数据结构与算法刷题
Jason刘大石
这个作者很懒,什么都没留下…
展开
-
剑指offer面试题7:重建二叉树java实现
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val;...原创 2019-06-08 16:27:40 · 263 阅读 · 0 评论 -
剑指offer31:栈的压入,弹出序列
【思路】借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。举例:入栈1,2,3,4,5出栈4,5,3,2,1首先1入辅助栈,此时栈顶1≠4,...转载 2019-07-21 20:44:43 · 123 阅读 · 0 评论 -
剑指offer30:包含min函数的栈
关于栈的简单应用https://www.cnblogs.com/zj0208/p/6296709.htmlimport java.util.Stack; 思路:用一个栈data保存数据,用另外一个栈min保存依次入栈最小的数比如,data中依次入栈,5, 4, 3, 8, 10, 11, 12, 1 则min依次入栈,5, 4, 3,no,no, no, no, 1...转载 2019-07-20 21:50:03 · 131 阅读 · 0 评论 -
剑指offer26:树的子结构
public class Solution { public static boolean HasSubtree(TreeNode root1, TreeNode root2) { boolean result = false; //当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false if (root2 != null...转载 2019-07-17 17:20:27 · 90 阅读 · 0 评论 -
剑指offer25 合并两个排序的链表
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Merge(ListNode list1,ListNode l...转载 2019-07-17 16:33:18 · 84 阅读 · 0 评论 -
剑指offer24 反转链表
public class Solution { public ListNode ReverseList(ListNode head) { if(head==null) return null; //head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null; ListNode pre =...转载 2019-07-17 16:01:25 · 72 阅读 · 0 评论 -
剑指offer23 链表入口结点
public class 链表中环的入口结点 { //找到一快一满指针相遇处的节点,相遇的节点一定是在环中 public static ListNode meetingNode(ListNode head) { if(head==null) return null; ListNode slow = head...转载 2019-07-16 12:17:13 · 114 阅读 · 0 评论 -
剑指offer22倒数第k个节点
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if (head == null || k == 0) return null; ListNode pA = head; ListNode pB = null; ...原创 2019-07-16 11:45:26 · 100 阅读 · 0 评论 -
剑指offer21:调整数组奇书偶数顺序
https://www.weiweiblog.cn/reorderarray/转载 2019-07-16 10:38:53 · 197 阅读 · 0 评论 -
剑指offer18java实现
第一个:删除链表的节点参考链接:https://www.cnblogs.com/edisonchou/p/4765163.html第二个:删除链表中重复的节点public class Solution { public ListNode deleteDuplication(ListNode pHead) { if (pHead == null || pHead.nex...原创 2019-06-21 12:47:54 · 154 阅读 · 0 评论 -
剑指offer面试题11:旋转数组的最小数字java实现
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。这里需要注意的是:(1)把indexMid初始化为index1的原因:一旦发现数组中第一个数字小于最后一个数字,表明该数组是排序的,就可以直接返回第一个数字了。(2)特殊情况的分...原创 2019-06-11 16:09:38 · 307 阅读 · 0 评论 -
剑指17
参考链接https://www.cnblogs.com/ik-heu/p/8462025.html#_lab2_0_9转载 2019-06-21 11:06:23 · 113 阅读 · 0 评论 -
剑指16
参考链接:https://www.weiweiblog.cn/power/原创 2019-06-21 09:56:10 · 130 阅读 · 0 评论 -
快速排序之荷兰国旗问题java实现
剑指offer80页的Partition函数看不懂可以看看这个,原理比那个要复杂,这里是把数组分割成三份,用此函数可以实现加速快排算法荷兰国旗问题:给定一个数组arr, 和一个数num, 请把小于num的数放在数组的左边, 等于num的数放在数组的中间, 大于num的数放在数组的右边。要求额外空间复杂度O(1), 时间复杂度O(N)public class Code_08_Neth...原创 2019-06-10 20:11:25 · 282 阅读 · 0 评论 -
剑指offer面试题10:变态青蛙跳java实现
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳是在前一次跳的结果上累加的,因此我们可以考虑使用递归的方法来解决问题。 那么从递归的三个步骤开始寻找解决方案: 1. 递归截止条件。 由于每次可以跳1-n的任意阶数,因此无论有多少...原创 2019-06-10 17:44:56 · 183 阅读 · 0 评论 -
JAVA刷题总结
LeetCode刷题指南(Java版):https://blog.youkuaiyun.com/a724888/article/details/81389292Java刷题常用知识总结:https://blog.youkuaiyun.com/yuzhengfei7/article/details/81903646转载 2019-07-28 13:00:22 · 178 阅读 · 0 评论