
数据结构与算法
Java &Android 常用数据结构以及算法
_小马快跑_
代码说,欢迎点赞、关注。感谢!
展开
-
【剑指offer】数组中出现次数超过一半的数字
题目:数组中出现次数超过一半的数字描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。/** * 题目: * 数组中出现次数超过一半的数字 * * 描述: * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。 * 由于数字2在数组中出现了5次,.转载 2021-05-03 13:22:34 · 122 阅读 · 1 评论 -
【剑指offer】两个栈实现一个队列
题目:用两个栈实现一个队列import java.util.Stack;/** * 用两个栈实现一个队列 */public class StackToQueue { public static void main(String[] args) { //进队 for (int i = 0; i < 5; i++) { enqueue(i); } //出队 int si原创 2021-05-03 12:18:14 · 112 阅读 · 0 评论 -
【剑指offer】把二叉树打印成多行
题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。TreeNode结点:public class TreeNode { public int value; public TreeNode left; public TreeNode right; public TreeNode(int value) { this.value = value; }}具体实现:/** * 把二叉树打印成多行:https://blog.n转载 2021-04-25 00:29:24 · 113 阅读 · 0 评论 -
【剑指offer】求二叉树的深度
/** * 二叉树的深度 * {@link # MultiLineTree.java} */public class DeepTree { public int TreeDepth(TreeNode root) { if (root == null) return 0; int deepLength = 0;//深度 Queue<TreeNode> queue = new LinkedList<>();原创 2021-04-25 00:29:10 · 109 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历
前序遍历 /** * 前序遍历二叉树 * * @param rNode 根node */ public static void preOrder(TreeNode rNode) { if (rNode != null) { //nodeList.add(rNode); System.out.println(rNode.value); preOrder(rNode原创 2021-04-25 00:28:31 · 104 阅读 · 0 评论 -
【剑指offer】重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。输入 [1,2,3,4,5,6,7],[3,2,4,1,6,5,7]输出 {1,2,5,3,4,6,7}实现/** * 重建二叉树 https://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f转载 2021-04-25 00:27:48 · 144 阅读 · 0 评论 -
【剑指offer】序列化、反序列化二叉树
题目请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己的转载 2021-04-25 00:26:51 · 89 阅读 · 0 评论 -
【剑指offer】顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.示例1输入 [[1,2],[3,4]]返回值 [1,2,4,3]思路简单来说,就是不断地收缩矩阵的边界定义四个变量代表范围,up、down、left、right向右走存入整行的值,当存入后,该行再也不会被遍历,转载 2021-04-25 00:25:13 · 101 阅读 · 0 评论 -
【剑指offer】求二叉树的下一个结点
题目:给你一颗二叉树的一个结点,返回中序遍历顺序中这个结点的下一结点/** * 题目:给你一颗二叉树的一个结点,返回中序遍历顺序中这个结点的下一结点 * <p> * 二叉树的下一个结点:https://blog.nowcoder.net/n/37b2e6170ffb4acaa27f67f88b1b1922?f=comment */public class NextTreeNode { //方案一 List<TreeLinkNode> linkNodes转载 2021-04-24 21:46:42 · 99 阅读 · 0 评论 -
【剑指offer】求二叉搜索树的第k个结点
题目:给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。 * 示例1 * 输入{5,3,7,2,4,6,8},3 * 返回值{4} * <p> * 说明 * 按结点数值大小顺序第三小结点的值为4声明TreeNode节点:public class TreeNode { public int value; public TreeNode left; public TreeNode right; public TreeNode(int转载 2021-04-24 21:09:37 · 156 阅读 · 0 评论 -
【剑指offer】菲波那切数列Java实现
文章目录题目一 递归实现二 优化递归三 优化存储四 持续优化题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)n≤39输入 4返回值 3一 递归实现 public static void main(String[] args) { int inputNum = 39; System.out.println(Fibonacci(inputNum)); } /**转载 2021-04-24 18:18:33 · 150 阅读 · 0 评论 -
Java排序算法之归并排序
/** * 归并排序 * 时间复杂度: O(nlogn) * 空间复杂度:O(n) */public class MergeSort { public static void main(String[] args) { int[] b = {3, 1, 5, 4, 6, 90, 48, 32, 78}; System.out.println(Arrays.toString(sort(b))); } private static int[]原创 2021-04-24 17:53:00 · 98 阅读 · 0 评论 -
Java算法排序之堆排序
/** * 堆排序 * 时间复杂度 O(nlogn) * 空间复杂度 O(1) */public class SelectHeapSort { public static void main(String[] args) { int[] arr = {4, 6, 8, 5, 9, 6, 3}; sort(arr); System.out.println(Arrays.toString(arr)); } public sta原创 2021-04-24 17:48:15 · 71 阅读 · 0 评论 -
Java排序算法之简单选择排序
/** * 简单选择排序 * 时间复杂度 O(n²) * 空间复杂度 O(1) */public class SelectEasySort { public static void main(String[] args) { int[] b = {3, 1, 5, 4, 6, 90, 48, 32, 78}; System.out.println(Arrays.toString(easySelectSort(b))); } private原创 2021-04-24 17:35:46 · 78 阅读 · 0 评论 -
Java排序算法之希尔排序
public class InsertHillSort { public static void main(String[] args) { int[] b = {3, 1, 5, 4, 32, 6, 90, 48, 32, 78}; System.out.println(" before: " + Arrays.toString(b)); System.out.println(" --------------------------原创 2021-04-24 17:21:16 · 98 阅读 · 0 评论 -
Java排序算法之直接插入排序
/** * 直接插入排序 * 时间复杂度 O(n²) * 空间复杂度 临时变量O(1) */public class InsertDirectSort { public static void main(String[] args) { int[] b = {3, 1, 5, 4, 32, 6, 90, 48, 32, 78}; System.out.println(Arrays.toString(directInsertSort(b))); }原创 2021-04-24 17:15:16 · 100 阅读 · 0 评论 -
Java排序算法之快速排序
/** * 快速排序 * 时间复杂度 O(nlogn) https://www.zhihu.com/question/22393997 * 空间复杂度 O(1) */public class ChangeQuickSort { public static void main(String[] args) { int[] b = {3, 1, 5, 4, 32, 6, 90, 48, 32, 78}; System.out.println(Arrays.to原创 2021-04-24 17:06:16 · 79 阅读 · 0 评论 -
Java排序算法之冒泡排序
/** * 冒泡排序 * 时间复杂度 O(n²) * 空间复杂度 临时变量O(1),如果是算术法交换 O(0) */public class ChangeBubbleSort { public static void main(String[] args) { int[] b = {3, 1, 5, 4, 6, 90, 48, 32, 78}; System.out.println(Arrays.toString(bubbleSort(b)));原创 2021-04-24 17:01:13 · 103 阅读 · 0 评论 -
链表合并:一个升序,一个降序,将两个链表合并成一个升序链表
题目:两个有序链表,一个升序,一个降序,如何将两个链表合并成一个升序链表。如:升序链表一:1->2->3->4降序链表二:6->5->4->3合并后结果:1->2->3->3->4->4->5->6思考:分成两步来实现,首先将降序链表二进行反转变成升序链表,然后就可以直接对两个升序链表进行操作了。实现:public static void main(String[] args) { System.out.p原创 2021-04-14 21:57:18 · 2786 阅读 · 1 评论 -
Java实现单链表的反转
文章目录方式一:直接反转方式二:递归反转方式一:直接反转对链表的某个节点Node执行指针反转时,同时需要知道当前Node的前驱Node、后继Node。public class Node { public Node next; //后置节点 public String content; //节点内容 public Node(String content, Node next) { this.content = content; this.n原创 2021-02-22 00:57:01 · 673 阅读 · 1 评论 -
Java Collection系列之:HashSet、LinkedHashSet、TreeSet的使用及源码解析
文章目录Set接口HashSetHashSet的使用&遍历源码浅析构造函数HashSet常用方法遍历LinkedHashSetLinkedHashSet的使用&遍历源码浅析TreeSetTreeSet的使用&遍历总结参考Set接口整体Collection&Map的实现关系:public interface Set<E> extends Colle...原创 2020-04-28 16:56:11 · 350 阅读 · 0 评论 -
Java Collection系列之HashMap、ConcurrentHashMap、LinkedHashMap的使用及源码分析
文章目录HashMapHashMap的存储结构初始化put & getput元素get元素扩容遍历Mapjdk1.8中的优化ConcurrentHashMapjdk1.7版本jdk1.8版本put元素get元素1.8中的变化LinkedHashMap内部结构put元素get元素移除最近最少使用元素TreeMap使用元素自然排序使用自定义排序参考HashMap、ConcurrentHash...原创 2020-04-28 12:36:44 · 666 阅读 · 0 评论