【算法方法总结·八】二叉树的一些技巧和注意事项
【算法方法总结·八】二叉树的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【算法方法总结·七】哈希的一些技巧和注意事项 【算法方法总结·八】二叉树的一些技巧和注意事项 🎯 【二叉树】二叉树的定义1234567891011121314// 二叉树定义public class TreeNode { int val; TreeNode left; TreeNode right; // 构造器 TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { ...
【算法方法总结·七】哈希的一些技巧和注意事项
【算法方法总结·七】哈希的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【算法方法总结·七】哈希的一些技巧和注意事项 🎯 【哈希】 哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里 枚举 的时间复杂度是 O(n),但如果使用 哈希表 的话, 只需要 O(1) 就可以做到 数据结构 涉及的基础内容简要讲解,主讲 Hash 函数的使用 哈希函数 将任意大小的键(Key)转换为固定大小的整数(哈希值) 哈希碰撞 也叫 哈希冲突,即不同键可能生成相同的哈希值(即映射到同一位置) 两种解决办法(1)拉链法(链地址法) 冲突的键值对 追加到链表 中 (2)开放寻址法 一般用其中的 线性探测法 依靠哈希表中的 空位 来解决碰撞问题 【哈希结构】 数组、set...
【算法方法总结·六】栈队列堆的一些技巧和注意事项
【算法方法总结·六】栈队列堆的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 🎯 【栈】可以用 Stack,但是一般用 Deque,比较方便 Stack12345678Stack<Integer> stack = new Stack<>()stack.pop() // 出栈,并返回出栈元素stack.push(x) // 把x入栈stack.peek() // 返回栈顶元素stack.isEmpty() // 是否为空stack.isFull() // 是否满了stack.length // 长度 Deque也支持 栈操作 123456789// 双端队列Deque<Integer> deque = new Linkedlist<>()//...
【算法方法总结·五】链表操作的一些技巧和注意事项
【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 🎯 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【链表操作】(1)自定义链表 单链表 123456789101112public class ListNode { int val; // 结点的值 ListNode next; // 下一个结点 public ListNode() {} // 节点的构造函数(无参) public ListNode(int val) { // 节点的构造函数(有一个参数) this.val = val; } public ListNode(int val, ListNode next) { // 节点的构造函数(有两个参数)...
【算法方法总结·四】字符串操作的一些技巧和注意事项
【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 🎯 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【字符串操作】 此章节涉及到以下 3 个问题 (1)API (2)自定义方法 (3)字符串匹配 API关于 String 的一些常用用法 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556String str = "abca";// 1、字符串大小 length()int len = str.length(); // 4// 2、将字符串对象中的字符转换为一个字符数组 toCharArray()char[] ss =...
【算法方法总结·三】滑动窗口的一些技巧和注意事项
【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 🎯 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【滑动窗口】 数组的和 随着 右边指针 移动一定是 非递减 的,就是 单调,不能包含负数 暴力解法 时间复杂度:O(n^2) 滑动窗口 时间复杂度:O(n) 数组不是单调的话,不要用 滑动窗口,考虑用 前缀和(前缀和很简单,就放此章一块讲了) 所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果,将O(n^2)的暴力解法降为O(n) 使用了双指针机制,left 和 right 指针维护窗口边界,初始均为 0,外层循环用 right 扩大窗口,内层循环用 left 缩小窗口 滑动窗口的使用条件 数组的和 随着 右边指针 移动一定是 非递减 的,就是 单调 数据连续性:需要 数组单调...