算法笔记
地表最菜研究生
深度学习,图像处理,欢迎交流学习
展开
-
LeetCode-Q99-恢复二叉搜索树
【原题链接】https://leetcode-cn.com/problems/recover-binary-search-tree/【题目】给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。【解题思路】利用BST的特点,对给出的错误二叉搜索树进行中序遍历,遍历完成后会出现两种情况:(1)两个位置不满足递增序列的要求:例如[1 6 3 4 5 2 7] (此时2与6交换)此时将ai与j+进行swap(2)一个位置不满足递增序列的要求:例如[1 3原创 2021-04-05 20:03:12 · 90 阅读 · 0 评论 -
LeetCode-Q98-验证二叉搜索树
【原题链接】https://leetcode-cn.com/problems/validate-binary-search-tree/【题目】给定一个二叉树,判断其是否是一个有效的二叉搜索树【二叉树特征如下:】节点的左子树只包含小于当前节点的数节点的右子树只包含大于当前节点的数所有左子树和右子树自身必须也是二叉搜索树【方法一:递归】算法:(1)定义函数boolean recurse(TreeNode node, int lower, int upper)(2)如果上界和下界存在,判断当前原创 2021-04-05 16:18:27 · 180 阅读 · 0 评论 -
LeetCode-Q105-从前序与中序遍历序列构造二叉树
【labuladong P26】【题目地址】https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/【解题思路】https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/cong-qian-xu-yu-zhong-xu-bian-li-xu原创 2021-04-03 21:15:11 · 135 阅读 · 0 评论 -
LeetCode-Q124-二叉树中的最大路径和
题目链接如下:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/【难度】hard【题目】给你一个二叉树的根节点root,返回其最大路径和解题代码如下: /*使用后序遍历,对子节点进行遍历获得最大值,然后递归获得最终结果 */class Solution { int maxRes = Integer.MIN_VALUE;//首先定义返回的最大值,先置为MIN_VALUE public int maxPat原创 2021-04-03 20:06:22 · 102 阅读 · 0 评论 -
算法笔记002——用一个栈实现另一个栈的排序
用一个栈实现另一个栈的排序思路:为了实现一个栈的从大到小的排序(栈顶到栈底),需要考虑一个事实,如果我们每次都往辅助栈中存放当前剩余的最大的值,最后直到当前栈空了,再把辅助栈转移回去就可以完成排序。【思路】利用help栈完成从上到下的顺序是从小到大,然后反压入原来栈就可以先弹出原来stack的栈顶元素,记为cur如果help为空,或cur小于help的栈顶元素(help.peek()),则将cur压入help否则,把help里面大于cur的栈顶元素pop出来,压入原来的stack,再往help里原创 2021-03-23 11:20:46 · 106 阅读 · 0 评论 -
算法笔记001——栈
参考书本《程序员代码面试指南》import java.util.Stack;/**设计一个getMin功能的栈【题目】实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。【要求】 1.pop、push、getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以使用现成的栈结构。【难度】* **/public class Mystack1 { private Stack<Integer> stackData; priva原创 2021-03-22 16:45:58 · 116 阅读 · 0 评论 -
算法视频课笔记-初四1-转圈打印矩阵/Z字形打印矩阵/矩阵中寻找值/判断是否为回文列表
转圈打印矩阵【题目七】给定一个整型矩阵matrix,请按照转圈的方式打印它。例如:12345678910111213141516打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10【要求】额外空间复杂度为0(1)。【解题思路】定位左上角与右下角,每次循环最外层的一圈,打印完后左上角向右下移动一位,右下角向左上角移动一位继续下次循环直到越界时结束(row1>row2 || col1 >col2)public class code_e7_P原创 2021-03-13 23:04:06 · 181 阅读 · 0 评论 -
算法视频课笔记-初三2-哈希函数/Random Pool
哈希函数具有离散型,即每个桶对应装的货物量差不多在增删改查的时间复杂度都是O(1)的hashset和hashmap的使用区别HashMap<String, String> map = new HashMap<>();map.put("zuo","1");map.containsKey("zuo");map.get("zuo");HashSet<String> set = new HashSet<String>();set.add("zuo")原创 2021-03-13 15:59:06 · 117 阅读 · 0 评论 -
算法视频课笔记-初三1-数组/队列/栈及其相互转换
【题目1】用数组结构实现大小固定的队列和栈队列:先进先出栈:先进后出【使用固定数组实现栈的功能】public static class ArrayStack{ private Integer[] arr; private Integer index; public ArrayStack(int initSize){ if(initSize < 0){ throw new IllegalArgumentException("The init size is less than 0原创 2021-03-07 16:33:34 · 77 阅读 · 1 评论 -
算法视频课笔记-初?-冒泡+插入排序
冒泡排序【时间复杂度】O(n^2)public static void bubbleSort(int[] arr){ if(arr.length < 2 || arr == null){ return; } for(int i = 0;i < arr.length -1;i++){ //外层循环控制排序次数 for(int j = 0; j< arr.length-1-i;j++){ //内层循环控制每一次排序次数 if(arr[j] > arr[j+1原创 2021-03-07 12:57:09 · 68 阅读 · 1 评论 -
算法视频课笔记-初三1-BucketSort及其延展
bucket sort 桶排序按照词频进行排序(计数排序)一般是0~200之内个数字进行排序public static void bucketSort(int[] arr){ if(arr = null || arr.length < 2){ return; } //获取数组中的最大值 int max = Integer.MIN_VALUE for (int i = 0; i < arr.length; i++){ max = Math.max(max, arr[i]);原创 2021-03-06 15:55:31 · 94 阅读 · 0 评论 -
算法笔记-001 归并,快速,堆排序
三个排序方法的实践复杂度在最基础的插入排序,选择排序,冒泡排序中,时间复杂度为O(n^2),空间复杂度为O(1)归并排序,快速排序,堆排序的时间复杂度为O(N*logN)空间复杂度三者不一样,分别为:归并:O(N),快速:O(logN),堆:O(1)归并排序(递归)递归利用栈先进后出的结果,进行存储。 (子过程和主过程共享同样的流程,但是作用域比主过程小)//输出数组中的最大值public class 视频_递归演示 { public static void main(String[] a原创 2020-12-13 22:16:19 · 108 阅读 · 0 评论 -
算法笔记-001 常见的算法题
冒泡排序:import java.utils.Arrays;public class Code_00_BubbleSort{ public static void bubbleSort(int[] arr){ if(arr == null || arr.length < 2){ return; } for(int end = arr.length-1; end > 0; end--){ for(int i = 0; i < end; i++){ if原创 2020-12-13 09:30:28 · 101 阅读 · 0 评论 -
LeetCode Q21.合并两个有序链表
Q21合并两个有序链表(简单)将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路链表+递归2.使用递归实现,链表不需要构造新节点3.终止条件:两个链表分别名为l1和l2,当l1为空或者l2为空时结束返回值:每一层调用都返回排序好的链表头本级递归内容:如果l1的val值更小,则将l1.next与排转载 2020-10-18 10:23:05 · 151 阅读 · 0 评论