【算法方法总结·六】栈队列堆的一些技巧和注意事项
【算法方法总结·六】栈队列堆的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 🎯 【栈】可以用 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 缩小窗口 滑动窗口的使用条件 数组的和 随着 右边指针 移动一定是 非递减 的,就是 单调 数据连续性:需要 数组单调...
【算法方法总结·二】双指针的一些技巧和注意事项
【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·二】双指针的一些技巧和注意事项 🎯 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【双指针】 暴力解法 时间复杂度:O(n^2) 双指针 时间复杂度:O(n) 双指针法(快慢指针法): 通过一个 快指针 和 慢指针 在一个for循环下完成两个for循环的工作 两种写法(1)快慢指针法:初始化为 slow = fast = 0 通过两个指针以 不同速度(通常是快指针移动两步、慢指针移动一步)遍历数据结构 适用于涉及链表、循环结构、滑动窗口或需要定位特点位置的情况 原地修改数组(如去重),快慢指针 更高效 (2)相向双指针法:初始化为 left = 0, right = nums.length - 1 从数据结构的...
【算法方法总结·一】二分法的一些技巧和注意事项
【算法方法总结·一】二分法的一些技巧和注意事项 【算法方法总结·一】二分法的一些技巧和注意事项 🎯 【算法方法总结·二】双指针的一些技巧和注意事项 【算法方法总结·三】滑动窗口的一些技巧和注意事项 【算法方法总结·四】字符串操作的一些技巧和注意事项 【算法方法总结·五】链表操作的一些技巧和注意事项 【算法方法总结·六】栈队列堆的一些技巧和注意事项 【二分法】 对于有些题目 暴力解法 时间复杂度为O(n) 而 二分查找 的时间复杂度为O(logn) 这便是 二分法 的 优势 所在 两种写法左闭右闭 [left,right] 精确查找、需包含右边界 其中left == right是 有意义 的,所以 while(left <= right) 更新时,left 更新为 mid + 1,right 更新为 mid - 1 所以 初始化 时,一般为 left = 0,right = n - 1 左闭右开 [left,right) 插入位置、避免越界 其中left == right是 没有意义 的,所以 while(left < right) 更新时,left...






