算法与数据结构基础课
文章平均质量分 75
神蜗牛
刚入行的萌新渣硕,想与各位大佬一起学习。
展开
-
算法与数据结构基础课第十二节笔记
暴力递归转动态规划什么暴力递归可以继续优化?有重复调用同一个子问题的解,这种递归可以优化如果每一个子问题都是不同的解,无法优化也不用优化例1:假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2开始时机器人在其中的M位置上(M 一定是 1~N 中的一个)如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到N位置,那么下一步只能往左来到 N-1 位置;如果机器人来到中间位置,那么下一步可以往左走或者往右走;规定机器人必须走 K 步,最终能来到P位置(P也是1原创 2021-05-20 11:36:06 · 152 阅读 · 2 评论 -
算法与数据结构基础课第十一节笔记
暴力递归暴力递归就是尝试1,把问题转化为规模缩小了的同类问题的子问题2,有明确的不需要继续进行递归的条件(base case)3,有当得到了子问题的结果之后的决策过程4,不记录每一个子问题的解熟悉什么叫尝试?例1:打印n层汉诺塔从最左边移动到最右边的全部过程1、1 ~ n-1 左到中2、n 左到右3、1~n-1 中到右模拟手动移的过程: public static void hanoi1(int n) { leftToRight(n); }原创 2021-05-15 20:48:58 · 143 阅读 · 0 评论 -
算法与数据结构基础课第十节笔记
并查集结构和图相关算法并查集有若干个样本a、b、c、d…类型假设是V 在并查集中一开始认为每个样本都在单独的集合里 用户可以在任何时候调用如下两个方法: boolean isSameSet(V x, V y) : 查询样本x和样本y是否属于一个集合 void union(V x, V y) : 把x和y各自所在集合的所有样本合并成一个集合 isSameSet和union方法的代价越低越好 public static class Node<V> { V val原创 2021-05-15 17:52:58 · 145 阅读 · 0 评论 -
算法与数据结构基础课第九节笔记
贪心算法最自然智慧的算法 用一种局部最功利的标准,总是做出在当前看来是最好的选择 难点在于证明局部最功利的标准可以得到全局最优解 对于贪心算法的学习主要以增加阅历和经验为主例1:给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中,字典序最小的结果贪心策略1:先给数组按照字典序排序,然后依次拼起来,适用于大多数case,但是个别如:ba,b 会拼成bba,但是bab实际上字典序更小,也就是两个字符串x,yx 的字典序 小于等于 y 的,那么x原创 2021-05-14 21:51:52 · 138 阅读 · 0 评论 -
算法与数据结构基础课第八节笔记
二叉树的递归套路例1:如何设计一个直观打印整棵二叉树的函数将原本的树逆时针转90度右中左的顺序public static void printTree(Node head) { System.out.println("Binary Tree:"); printInOrder(head, 0, "H", 17); System.out.println(); } public static void printInOrder(Node head, int height, St原创 2021-05-13 20:55:33 · 271 阅读 · 0 评论 -
算法与数据结构基础课第七节笔记
二叉树的基本算法先序,中序,后序遍历先序 中左右中序 左中右后序 左右中public static class Node { public int value; public Node left; public Node right; public Node(int v) { value = v; } }public static void pre(Node head) { if (head == null) { retu...原创 2021-05-13 17:13:33 · 156 阅读 · 0 评论 -
算法与数据结构基础课第六节笔记
链表相关面试题面试时链表解题的方法论对于笔试,不用太在乎空间复杂度,一切为了时间复杂度 对于面试,时间复杂度依然放在第一位,但是一定要找到空间最省的方法快慢指针1)输入链表头节点,奇数长度返回中点,偶数长度返回上中点2)输入链表头节点,奇数长度返回中点,偶数长度返回下中点3)输入链表头节点,奇数长度返回中点前一个,偶数长度返回上中点前一个4)输入链表头节点,奇数长度返回中点前一个,偶数长度返回下中点前一个public static class Node { public原创 2021-05-13 15:46:49 · 128 阅读 · 0 评论 -
算法与数据结构基础课第五节笔记
trie,桶排序、排序总结前缀树单个字符串中,字符从前到后的加到一棵多叉树上 字符放在路上,节点上有专属的数据项(常见的是pass和end值) 所有样本都这样添加,如果没有路就新建,如有路就复用 沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1可以完成前缀相关的查询功能点void insert(String str) 添加某个字符串,可以重复添加,每次算1个 int search(String str) 查询某个字符...原创 2021-05-13 11:22:46 · 115 阅读 · 0 评论 -
算法与数据结构基础课第四节笔记
比较器与堆堆 堆结构就是用数组实现的完全二叉树结构 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 堆结构的heapInsert与heapify操作 堆结构的增大和减少 优先级队列结构,就是堆结构 数组保存堆的位置索引 0开头 1开头(使用位运算加速)左孩子: 2*i+1 2*i右孩子: 2*i+...原创 2021-05-11 20:57:29 · 85 阅读 · 0 评论 -
算法与数据结构基础课第三节笔记
归并排序与随机快排归并排序整体是递归,左边排好序+右边排好序+merge让整体有序 让其整体有序的过程里用了排外序方法 利用master公式求解时间复杂度 非递归实现递归实现:public static void mergeSort1(int[] arr) { if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.length -原创 2021-05-11 17:19:46 · 166 阅读 · 1 评论 -
算法与数据结构基础课第二节笔记
一些基础数据结构,链表,栈,队列1、反转链表单链表public static Node reverseLinkedList(Node head) { Node pre = null; Node next = null; while (head != null) { next = head.next; head.next = pre; pre = head; head = next; } return pre;}双向链表public .原创 2021-04-17 16:27:55 · 66 阅读 · 0 评论 -
算法与数据结构基础课第一节笔记
评估算法优劣的核心指标:1、时间复杂度就是在流程中发生多少次常数时间操作2、空间复杂度输入输出的空间不算3、常数时间的操作:如果一个操作的执行时间不以具体数据量为转移,每次执行时间都是固定时间,这样的操作为常数时间的操作。例如:常见的算术运算 常见的位运算(>> 带符号右移,最高位用符号位补足,>>> 不带符号位右移,最高位都用0补足) 赋值、比较、自增、自减操作等 数组寻址操作如何确定算法流程的总操作数量与样本之间的表达式关系?1、原创 2021-04-15 21:01:28 · 117 阅读 · 0 评论