左神算法基础班源码
花月诗人
这个作者很懒,什么都没留下…
展开
-
设计RandomPool结构
package class_05;import java.util.HashMap;/** * * 设计RandomPool结构 【题目】 设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入。 delete(key):将原本在结构中的某个key移除。 getRandom(): 等概率随机返回结构中的任何一个key...原创 2018-10-09 13:31:10 · 7410 阅读 · 0 评论 -
将单向链表按某值划分成左边小、中间相等、右边大的形式
package class_03;/** * * 将单向链表按某值划分成左边小、中间相等、右边大的形式 【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个 整 数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot 的节点,中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。 除这个要求外,对调整后的节点顺序没...原创 2018-10-07 09:30:19 · 7891 阅读 · 0 评论 -
判断一个链表是否为回文结构
package class_03;import java.util.Stack;/** * * 判断一个链表是否为回文结构 【题目】 给定一个链表的头节点head,请判断该链表是否为回 文结构。 例如: 1->2->1,返回true。 1->2->2->1,返回true。 15->6->15,返回true。 1->2->3...原创 2018-10-07 09:29:40 · 2875 阅读 · 0 评论 -
打印两个有序链表的公共部分
package class_03;/** * * 打印两个有序链表的公共部分 * 【题目】 给定两个有序链表的头指针head1和head2,打印两个 * 链表的公共部分。 */public class Code_10_PrintCommonPart { public static class Node { public int value; public Node n...原创 2018-10-07 09:28:46 · 3190 阅读 · 0 评论 -
在行列都排好序的矩阵中找数【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。
package class_03;/** * * 在行列都排好序的矩阵中找数 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, * matrix的每一行和每一 列都是排好序的。实现一个函数,判断K * 是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 * 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返 * 回false。...原创 2018-10-07 09:28:13 · 10093 阅读 · 0 评论 -
“之”字形打印矩阵
package class_03;/** * * “之”字形打印矩阵 * 【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵, * 例如: 1 2 3 4 5 6 7 8 9 10 11 12“之”字形打印的 * 结果为:1,2,5,9,6,3,4,7,10,11,8,12 * 【要求】 额外空间复杂度为O(1 * */public class Code...原创 2018-10-07 09:27:15 · 8263 阅读 · 0 评论 -
反转单向和双向链表
package class_03;/** * * 反转单向和双向链表 * 【题目】 分别实现反转单向链表和反转双向链表的函数。 * 【要求】 如果链表长度为N,时间复杂度要求为O(N),额外空间 * 复杂度要求为O(1) */public class Code_07_ReverseList { public static class Node { public int ...原创 2018-10-07 09:25:25 · 8245 阅读 · 2 评论 -
旋转打印正方形矩阵
package class_03;/** * * * 旋转正方形矩阵 * 【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成 * 顺时针旋转90度的样子。 * 【要求】 额外空间复杂度为O(1)。 * */public class Code_06_PrintMatrixSpiralOrder { public static void spiralOrder...原创 2018-10-07 09:24:27 · 8020 阅读 · 0 评论 -
转圈打印矩阵
package class_03;/** * * 转圈打印矩阵 * 【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。 * 例如: 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 * 【要求】 额外空间复杂度为O(1)。 * *...原创 2018-10-07 09:22:52 · 2220 阅读 · 0 评论 -
Dijkstra算法 java实现
import java.util.HashMap;import java.util.HashSet;import java.util.Map.Entry;/** * * Dijkstra算法 * 适用范围:没有权值为负数的边 * */// no negative weightpublic class Code_06_Dijkstra { public static ...原创 2018-10-05 11:35:32 · 10274 阅读 · 1 评论 -
prim算法 源码(java)
import java.util.Comparator;import java.util.HashSet;import java.util.PriorityQueue;import java.util.Set;/** * * prim算法 适用范围:要求无向图 * */// undirected graph onlypublic class Code_05_Prim {...原创 2018-10-05 11:33:43 · 3277 阅读 · 0 评论 -
复制含有随机指针节点的链表
package class_03;import java.util.HashMap;/** * * 复制含有随机指针节点的链表 【题目】 一种特殊的链表节点类描述如下: public class Node { public int value; public Node next; public Node rand; public Node(int data) { this.v...原创 2018-10-07 09:31:09 · 7923 阅读 · 0 评论 -
两个单链表相交的一系列问题
package class_03;/** * * 两个单链表相交的一系列问题 【题目】 在本题中,单链表可能有环,也可能无环。给定两个 单链表的头节点 head1和head2,这两个链表可能相交,也可能 不相交。请实现一个函数, 如果两个链表相交,请返回相交的 第一个节点;如果不相交,返回null 即可。 要求:如果链表1 的长度为N,链表2的长度为M,时间复杂度请达到 O(...原创 2018-10-07 09:31:44 · 2224 阅读 · 0 评论 -
认识哈希函数和哈希表
package class_05;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map.Entry;/** * * 认识哈希函数和哈希表 * */public class Code_01_HashMap { public static ...原创 2018-10-09 13:30:26 · 7115 阅读 · 4 评论 -
已知一棵完全二叉树,求其节点的个数
package class_04;/** * * 已知一棵完全二叉树,求其节点的个数 * 要求:时间复杂度低于O(N),N为这棵树的节点个数 * */public class Code_08_CompleteTreeNodeNumber { public static class Node { public int value; public Node left; ...原创 2018-10-08 12:55:08 · 8832 阅读 · 0 评论 -
判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树
package class_04;import java.util.LinkedList;import java.util.Queue;/** * * 判断一棵树是否是搜索二叉树 * 判断一棵树是否是完全二叉树 * */public class Code_07_IsBSTAndCBT { public static class Node { public int v...原创 2018-10-08 12:54:22 · 7916 阅读 · 0 评论 -
判断一棵二叉树是否是平衡二叉树
package class_04;/** * * 判断一棵二叉树是否是平衡二叉树 * */public class Code_06_IsBalancedTree { public static class Node { public int value; public Node left; public Node right; public Node(int ...原创 2018-10-08 12:53:33 · 7446 阅读 · 0 评论 -
折纸问题
package class_04;/** * * 折纸问题 【题目】 请把一段纸条竖着放在桌子上,然后从纸条的下边向 上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折痕 突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折 2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折 痕、下折痕和上折痕。 给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,...原创 2018-10-08 12:52:58 · 7584 阅读 · 0 评论 -
二叉树的序列化和反序列化
package class_04;import java.util.LinkedList;import java.util.Queue;/** * * 二叉树的序列化和反序列化 * */public class Code_04_SerializeAndReconstructTree { public static class Node { public int val...原创 2018-10-08 12:52:14 · 7318 阅读 · 0 评论 -
在二叉树中找到一个节点的后继节点
package class_04;/** * * 在二叉树中找到一个节点的后继节点 * 该结构比普通二叉树节点结构多了一个指向父节点的parent指针。假 设有一 棵Node类型的节点组成的二叉树,树中每个节点的parent指针 都正确地指向 自己的父节点,头节点的parent指向null。只给一个在 二叉树中的某个节点 node,请实现返回node的后继节点的函数。在二 叉...原创 2018-10-08 12:51:37 · 7556 阅读 · 0 评论 -
打印整个二叉树
package class_04;/** * * 福利函数 * 打印整个二叉树 * */public class Code_02_PrintBinaryTree { public static class Node { public int value; public Node left; public Node right; public Node(int...原创 2018-10-08 12:50:56 · 7612 阅读 · 0 评论 -
实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式
package class_04;import java.util.Stack;/** * * 实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式 * */public class Code_01_PreInPosTraversal { public static class Node { public int value; public Node left...原创 2018-10-08 12:50:03 · 7611 阅读 · 0 评论 -
搜索局部最小算法
package class_03;/** * * 搜索局部最小 * * 给定无序数组arr, 已知arr中任意连个相邻的数都不相等。 * 写一个函数,只需返回arr中任意一个局部最小出现的位置。 * */public class Code_15_FindOneLessValueIndex { public static int getLessIndex(int[] ...原创 2018-10-08 12:49:04 · 8049 阅读 · 0 评论 -
kruskal算法 源码(java)
import java.util.Collection;import java.util.Comparator;import java.util.HashMap;import java.util.HashSet;import java.util.PriorityQueue;import java.util.Set;/** * * kruskal算法 适用范围:要求无向图 ...原创 2018-10-05 11:32:30 · 9550 阅读 · 0 评论 -
拓扑排序算法TopologySort
import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Queue;/** * * 拓扑排序算法 * 适用范围:要求有向图,且有入度为0的节点,且没有环 * */public class...原创 2018-10-05 11:31:36 · 8890 阅读 · 0 评论 -
图的深度优先遍历DFS 源码(java)
import java.util.HashSet;import java.util.Stack;/** * * 图的深度优先遍历 * */public class Code_02_DFS { public static void dfs(Node node) { if (node == null) { return; } Stack<Node>...原创 2018-10-05 11:30:42 · 9439 阅读 · 0 评论 -
12.给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * * 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。 * */public class Code_11_MaxGap { public static int maxGap(int[] nums) { if (n...原创 2018-10-02 23:02:55 · 9552 阅读 · 0 评论 -
10.自定义排序规则(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;import java.util.Comparator;/** * * 自定义排序规则 * */public class Code_09_Comparator { public static class Student { public String name; publ...原创 2018-10-01 23:32:43 · 8940 阅读 · 0 评论 -
09.荷兰国旗问题(左神算法基础班源码)
package basic_class_01;/** * * 荷兰国旗问题 * 给定一个数组arr,和一个数num,请把小于num的数放在数组的 * 左边,等于num的数放在数组的中间,大于num的数放在数组的右边。 * 要求额外空间复杂度O(1),时间复杂度O(N) */public class Code_08_NetherlandsFlag { public stati...原创 2018-10-01 23:32:02 · 9099 阅读 · 0 评论 -
08.基数排序 - RadixSort(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * * 基数排序 * */public class Code_07_RadixSort { // only for no-negative value public static void radixSort(int[] arr) { if (arr == null ...原创 2018-10-01 23:31:22 · 2931 阅读 · 1 评论 -
07.桶排序 --- BucketSort(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * 桶排序 * 1,非基于比较的排序,与被排序的样本的实际数据状况很有关系,所 以实际中并不经常使用 * 2,时间复杂度O(N),额外空间复杂度O(N) * 3,稳定的排序 * */public class Code_06_BucketSort { // only ...原创 2018-10-01 23:30:40 · 8873 阅读 · 0 评论 -
06.归并排序 - MergeSort(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * master公式的使用 * T(N) = a*T(N/b) + O(N^d)1) * log(b,a) > d -> 复杂度为O(N^log(b,a))2) * log(b,a) = d -> 复杂度为O(N^d * logN)3) * log(b,a)...原创 2018-10-01 23:29:37 · 10364 阅读 · 0 评论 -
04.堆排序 --- HeapSort(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * * 堆排序的细节和复杂度分析 * 时间复杂度O(N*logN),额外空间复杂度O(1) * 堆结构非常重要 1,堆结构的heapInsert与heapify 2,堆结构的增大和减少 3,如果只是建立堆的过程,时间复杂度为O(N) 4,优先级队列结构,就是堆结构 *...原创 2018-10-01 23:28:06 · 9745 阅读 · 0 评论 -
03.选择排序 - SelectionSort(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * * 选择排序的细节讲解与复杂度分析 * 时间复杂度O(N^2),额外空间复杂度O(1) * 此排序算法仅用于教学 * */public class Code_02_SelectionSort { public static void selectionSort...原创 2018-10-01 23:26:20 · 9189 阅读 · 1 评论 -
02.插入排序 - InsertionSort(左神算法基础班源码)
package basic_class_01;import java.util.Arrays;/** * * 选择排序的细节讲解与复杂度分析 * 时间复杂度O(N^2),额外空间复杂度O(1) * 此排序算法仅用于教学 * */public class Code_01_InsertionSort { public static void insertionSort(i...原创 2018-10-01 23:23:39 · 8604 阅读 · 0 评论 -
13.在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。(左神算法基础班源码)
package basic_class_01;/** * *小和问题 在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。 例子: [1,3,4,2,5] 1左边比1小的数,没有; 3左边比3小的数,1; 4左边比4小的数,1、3; 2左边比2小的数,1; 5左边比5小的数,1、3、4、2; 所以小和为1+1+3+1+1+3+4+2=...原创 2018-10-02 23:04:11 · 9826 阅读 · 0 评论 -
0201.KMP字符串匹配算法(左神算法基础班源码)
package basic_class_02;/** * * KMP字符串匹配算法 * */public class Code_01_KMP { public static int getIndexOf(String s, String m) { if (s == null || m == null || m.length() < 1 || s.length() &...原创 2018-10-04 23:02:27 · 8295 阅读 · 1 评论 -
图的宽度优先遍历(BFS)java源码
import java.util.HashSet;import java.util.LinkedList;import java.util.Queue;/** * * 图的宽度优先遍历 * */public class Code_01_BFS { public static void bfs(Node node) { if (node == null) { ...原创 2018-10-05 11:29:09 · 3253 阅读 · 0 评论 -
0304.猫狗队列
package class_03;import java.util.LinkedList;import java.util.Queue;/** * * 猫狗队列 * 实现一种狗猫队列的结构,要求如下: 用户可以调用add方法将cat类或dog类的 * 实例放入队列中; 用户可以调用pollAll方法,将队列中所有的实例按照进队列 * 的先后顺序依次弹出; 用户可以调用poll...原创 2018-10-04 23:15:50 · 8588 阅读 · 0 评论 -
0303.仅用队列结构实现栈结构;仅用栈结构实现队列结构
package class_03;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/** * * 如何仅用队列结构实现栈结构? * 如何仅用栈结构实现队列结构? * */public class Code_03_StackAndQueueConvert { public...原创 2018-10-04 23:13:07 · 9182 阅读 · 0 评论