摘要: 11.1:归并非递归实现 步长变化: 1 2 4 8 16 32 ... 一旦超过N步长停 logN次 1 // 非递归方法实现 2 public static void mergeSort(int[] arr) { 3 if (arr == null || arr.length < 2) { 4 阅读全文
posted @ 2022-05-11 15:43 yzmarcus 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 11:归并排序(重要) 时间复杂度:O(N * logN) 与O(N^2)排序算法的比较: 1、O(N^2)大量浪费了比较行为。 2、归并排序,当左组和右组的排序排好后,在merge的时候, 左组数之间是没有比较的。 是左组数与右组数的比较。 每一次比较行为都变成了结果并且再传递下去。 算法流程: 阅读全文
posted @ 2022-05-10 16:25 yzmarcus 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 10:Java中的哈希表和有序表 哈希表在使用时,增删改查时间复杂度都是O(1); 有序表在使用时,比哈希表功能多,时间复杂度都是O(logN); 哈希表: 1、哈希表在使用层面上可以理解为一种集合结构; 2、如果只有key,没有伴随数据value,可以使用HashSet结构; 3、如果既有key, 阅读全文
posted @ 2022-05-09 17:01 yzmarcus 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 9.1:Master公式 T(N) = a * T(N/b) + O(N^d); 其中a、b、d都是常数的递归函数,可以直接通过Master公式来确定时间复杂度。 如果log(b, a)< d, 复杂度O(N^d) 如果log(b, a)> d, 复杂度O(N^log(b, a)) 如果log(b, 阅读全文
posted @ 2022-05-09 16:30 yzmarcus 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 9:递归 递归的应用十分重要,后面会反复出现。 求数组arr[L ... R]中最大值,怎么用递归方法实现 1 // 求arr中的最大值 2 public static int getMax(int[] arr) { 3 return process(arr, 0, arr.length - 1); 阅读全文
posted @ 2022-05-09 16:14 yzmarcus 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 8.7:如何用队列结构实现栈结构 1 public static class TwoQueueStack<T> { 2 3 public Queue<T> queue; 4 public Queue<T> help; 5 6 public TwoQueueStack() { 7 queue = ne 阅读全文
posted @ 2022-05-09 14:21 yzmarcus 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 8.6:如何用栈结构实现队列结构 两栈:push栈 和 pop栈 倒数据的要求: 1、如果倒数据,必须一次性倒完。 2、如果pop栈不为空,不能倒数据。pop栈空了才能倒数据。 1 public static class TwoStacksQueue { 2 public Stack<Integer 阅读全文
posted @ 2022-05-09 14:20 yzmarcus 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 8.5:实现特殊栈,在基本功能的基础上,再实现返回栈中最小元素的功能 1、pop,push,getMin操作的时间复杂度是o(1)。 2、设计的栈类型可以使用现成的栈结构。 两个栈,一个数据栈,一个最小栈。每次数据过来压入数据组,同时压入最小栈,但压入最小 栈是有条件的: 1、如果最小栈中没有数,压 阅读全文
posted @ 2022-05-09 14:18 yzmarcus 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 8.4 :数组实现栈 数组 + index控制 阅读全文
posted @ 2022-05-08 11:39 yzmarcus 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 8.3:数组实现队列(难) 用size解耦 pushi和polli 1 //数组实现队列,先进先出 2 //通过size解耦end和begin 3 public static class MyQueue { 4 private int[] arr; 5 private int end; // pus 阅读全文
posted @ 2022-05-08 10:57 yzmarcus 阅读(18) 评论(0) 推荐(0) 编辑