摘要:
今天继续学习了回溯: 组合求和的进阶 元素可以重复使用:backtracking(candidates, target, sum, i); // 不用i+1了,表示可以重复读取当前的数 数组去重:首先数组排序,然后使用used 分割回文子串问题,抽象为组合问题,注意如何判断是否是回文子串 5. 39 阅读全文
摘要:
今天学习了回溯算法: 基本知识,关键是那个模板 组合问题:画树状图+简单的剪枝 电话号码的组合问题,和经典组合问题的差别在于取不同集合中的组合,注意如何有限制的在for循环之前确定循环哪个数组,通过树状图确定for循环中i的大小。 1. 基本知识 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯 阅读全文
摘要:
今天学习了队列的常见题型: 滑动窗口最大值,先进先出不难想到队列,最大值可以考虑优先队列,但是此题还是典型的单调队列(需要自己实现) 前k个高频元素,维护最大值常用优先队列,注意选的最小堆 7. 239滑动窗口最大值(队列) 题目:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左 阅读全文
摘要:
今天学习了栈和队列的第一部分。 基础知识 用栈模拟队列(双栈) 用队列模拟栈(一个队列,但是需要重复将队头元素写到队尾) 栈的基本应用(括号匹配、删除重复项、逆波兰表达式) 1. 基础知识 栈和队列是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是我们可以控制使用哪种容器来 阅读全文
摘要:
今天学习了字符串的第二部分。 翻转字符串里的单词,先整体翻转,再局部翻转。注意移除空格和前头数组中移除元素类似。 右旋转,也是先整体再局部翻转。 4. 翻转字符串里的单词 题目:给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue 阅读全文
摘要:
今天学了字符产的第一部分: 反转字符串,使用双指针。 反转字符串Ⅱ,需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。 数组填充问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。 1. 反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来 阅读全文
摘要:
今天是8月3日,学习了链表的第二部分。 交换链表两个节点,考察对next的操作和tmp的灵活运用。 删除链表的倒数第N个节点,双指针减少遍历次数。 链表相交,移动链表尾对齐,其实就是动长链表的指针。 环形链表,记住方法。 4. 24交换链表两个节点 题目:给你一个链表,两两交换其中相邻的节点,并返回 阅读全文
摘要:
今天是8月2日,学习了链表的基础知识。题目主要是链表的基础操作和反转链表,注意虚拟头节点的使用、next的顺序和tmp的灵活使用。 1. 移除元素 题目:给一个链表的头节点 head 和整数 val ,请删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 删除的方法, 阅读全文
摘要:
2024年8月1日,今天学习了数组的第二部分。 1.巩固了昨天的双指针问题,即滑动窗口/双指针;注意,双指针是为了减少for循环,使用的时候小心循环的写法和快慢指针的增长方法。 2.学习了数组模拟的螺旋矩阵问题,注意循环不变量; 3.学习了前缀和的方法,前缀和常用来解决区间和问题,其实是避免重复读取 阅读全文
摘要:
2024年7月31日,今日复习了数组的基础知识;巩固了二分法的写法,保证可以快速准确写出;学习了双指针的应用,双指针是为了让多个for循环压缩为一个循环,学习的时候尤其注意循环的写法。 1. 数组基础知识 定义:数组是存放在连续内存空间上的相同类型数据的集合。 几个特点: 数组下标都是从0开始的。 阅读全文