![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题目
主要是一些算法题目
峰子_狂人
我为JAVA狂
展开
-
二叉树的序列化和反序列化
下面代码是先序序列化和反序列化反序列化没有中序,无法确认head的位置序列化如果中序和后序,只是队列加入放在递归的顺序有变化 pres(head.left, queue); queue.add(String.valueOf(head.value)); pres(head.right, queue); pres(head.left, queue); pres(head.right, q原创 2021-05-28 14:26:36 · 101 阅读 · 0 评论 -
Code15 荷兰国旗问题
解决该问题,只需先设定三个用于指定元素的下标指针(PS:在Java中没有指针,此处方便描述):一个前指针begin,一个中指针current,一个后指针end。Current指针遍历整个数组序列:(1)当current指针所指元素为0时,与begin指针所指的元素交换,而后current++,begin++;(2)当current指针所指元素为1时,不做任何交换,而后current++;(3)当current指针所指元素为2时,与end指针所指的元素交换,而后current指针不动,end–.荷.原创 2021-05-25 22:35:34 · 176 阅读 · 0 评论 -
Code13 数组中左边大于2倍右边数的总对数
数组[6,4,2,1]其中(6,2)(6,1)(4,1)这3个组合是满足左边大于右边数的两倍核心代码块,建立在归并排序的基础上 int ans = 0; int windowR = M+1; for (int j = L;j<=M;j++){ while (windowR <= R && arr[j] > (arr[windowR]*2)){ windowR ++;原创 2021-05-25 21:32:34 · 144 阅读 · 0 评论 -
Code12 数组逆序对
求数组逆序对左边数和任一右边数组成降序,就是一组逆序对[3,1,0,4,3,1]0:(3,1)(3,0)(3,1)1:(1,0)2:无3:(4,3)(3,1)4:(3,1)最终有7对。自己理解后琢磨的方法public static void main(String[] args) { int [] arr = new int[]{3,1,0,4,3,1}; System.out.println(minSum(arr)); } public原创 2021-05-24 22:29:16 · 197 阅读 · 0 评论 -
Code11 求数组小和问题
数组小和问题:int[] arr = new int[]{4,1,2,3,6};每个位置的前面比自己小的数的累加和问题。0:没有比自己小1:没有比自己小2:1比自己小,累加 13:1,2位置比自己小,累加 34:1,2,3位置比自己小,累加6;总共:10;归并排序变种处理时间复杂度:O(N*logN)和归并排序也就是下面一句代码的区别 ans += arr[p1] < arr[p2]?arr[p1] * (R - p2 +1):0;public static int min原创 2021-05-24 21:48:57 · 85 阅读 · 0 评论 -
Code10 归并排序
时间复杂度:O(N*logN)用空间换时间的做法:递归版public static void mergeSort1(int[]arr){ if(arr!=null && arr.length<2){ return ; } process(arr,0,arr.length-1); } public static void process(int[] arr,int L,int R){原创 2021-05-24 21:17:58 · 334 阅读 · 0 评论 -
链表(K个一组反转链表返回)
leetcode中的一个题目:https://leetcode.com/problems/reverse-nodes-in-k-group///k个一组反转链表//https://leetcode.com/problems/reverse-nodes-in-k-group/public class Code01_ReverseNodesInKGroup { public static class ListNode { public int val; publi原创 2021-03-27 15:16:10 · 74 阅读 · 0 评论 -
code02-双向链表反转(DoubleLinked)
//双链表反转public class Code01_ReverseDoubleList { public static class Node{ public int value; public Node next; public Node last; public Node(int value) { this.value = value; } } public static原创 2021-03-27 13:36:04 · 131 阅读 · 0 评论 -
code04-双向链表实现队列
//使用双向链表实现队列public class Code01_DoubleLinkedListToQueue { public static class Node<V>{ public V value; public Node<V> next; public Node<V> last; public Node(V v){ value = v; ne原创 2021-03-27 14:41:26 · 267 阅读 · 0 评论 -
code05-单向链表实现栈
//使用单向链表实现栈public class Code01_LinkedListToStack { public static class Node<V>{ public V value; public Node<V> next; public Node(V v){ value = v; next = null; } } public sta原创 2021-03-27 14:02:30 · 67 阅读 · 0 评论 -
code05-单向链表实现队列
//使用单向链表实现队列public class Code01_LinkedListToQueue { public static class Node<V>{ public V value; public Node<V> next; public Node(V v){ value = v; next = null; } } public st原创 2021-03-27 13:55:22 · 102 阅读 · 0 评论 -
code01-单链表反转(Linked)
单向链表的反转,需要注意调用时候,node的节点是需要抓住返回的链表,//单链表反转public class Code01_ReverseList { public static class Node{ public int value; public Node next; public Node(int value) { this.value = value; } } public s原创 2021-03-27 13:15:59 · 91 阅读 · 0 评论 -
链表(两数相加)
两个链表,里面是数字,然后做相加,返回https://leetcode-cn.com/problems/add-two-numbers///两个链表里面数字加上//public class Code01_AddTwoNumber { public static class ListNode { public int val; public ListNode next; public ListNode(int val) {原创 2021-03-28 20:39:32 · 103 阅读 · 0 评论 -
链表(两个有序链表,合并成一个有序链表)
//两个有序链表,合并成一个链表public class Code01_MergeTwoSortedLinkedList { public static class ListNode { public int val; public ListNode next; } public static ListNode MergeTwoSortedLinkedList(ListNode head1,ListNode head2){ if(h原创 2021-03-28 20:39:44 · 107 阅读 · 0 评论 -
二叉树的先序,中序,后序遍历有递归和无递归
Node结构public static class Node{ private int value; private Node left; private Node right; public int getValue() { return value; } public void setValue(int value) { this.value = valu原创 2021-04-22 17:45:03 · 98 阅读 · 0 评论 -
二叉树 找出最大宽度数
用了两种不同的方式,一个是基于队列加Map,一个是单独队列queue+mappublic static int maxWidthWithMap(Node head){ if(head == null){ return 0; } //这里是放Node入队列的 Queue<Node> queue = new LinkedList<>(); //这里主要是为了保存Node的层级的原创 2021-04-22 17:47:54 · 101 阅读 · 0 评论 -
二叉树 打印出来一个整体树
打印出来的结果是一个正常格式二叉树的左转90°的结果代码如下public class TestPrintBT { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node no原创 2021-04-22 20:47:33 · 49 阅读 · 0 评论 -
二叉树 任一节点的后继节点,前驱节点
在这个里面,Node是有一个指向父节点的指针。后继节点是 二叉树中序 (左头右)之后,当前节点的下一个节点。//给出任意一个节点,找出后继节点,后继节点是 中序之后,这个节点的下一个节点public class Code01_GetSuccessorNode { public static Node getSuccessorNode(Node node){ if(node == null){ return null; }原创 2021-04-22 21:18:52 · 326 阅读 · 0 评论