随笔分类 - 日常学习 / jave se / 力扣刷题
摘要:简要介绍 1.1 目的:动态规划主要处理求最值的题型 1.2 核心问题:穷举,列出状态转移方程、判断算法问题是否具备【最优子结构】(通过子问题的最值得到原问题的最值)、是否存在【重叠子问题】(用暴力穷举的话效率会很低,可以使用【备忘录】和【DP table】来优化穷举问题) 2 如何写状态转移方程
阅读全文
摘要:图的遍历 从一个顶点到其它顶点的遍历方法--图遍历(不访问已经访问过的顶点) dfs算法(递归遍历、回溯) 从顶点0开始,再对顶点0的相邻顶点进行dfs算法(可以维护一个标记数组,来标记某个顶点是否被访问过) dfs算法不是最短路径
阅读全文
摘要:1.二叉树的思维模式 1.1 是否可以通过遍历一遍二叉树得到答案?如果可以,用一个traverse函数配合外部变量来实现,<遍历的思维模式> 1.2 是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,<分解问题的思维方
阅读全文
摘要:三种二分搜索 框架: 技巧1:代码不要出现else 而是用 else if取代(便于体现多种情况) 技巧2:mid计算方法:right+(left-right)/2 技巧3:while循环条件,是left<=right,如果是小于,则会出现(left=2,right=2)(会漏掉某一个元素)无法继续
阅读全文
摘要:1 前缀和(第一行/第一行+第一列变成0) 1.1元素和 一维:利用数列的技巧:Sn-Sm=A_{m_1}+……+A_{n} 1.2 二维矩阵 任意一个矩阵之和可以转化成几个大矩阵(左上角都是0,0)的线性运算 前缀和(积)的使用条件: 1.原数组不变,如果原数组某一个值发生变化,那么presum的
阅读全文
摘要:1.滑动窗口(本质是数组快慢指针的一部分) 1.1 框架 int left = 0, right = 0; // 滑动窗口算法伪码框架 void slidingWindow(String s) { // 用合适的数据结构记录窗口中的数据,根据具体场景变通 // 比如说,我想记录窗口中元素出现的次数,
阅读全文
摘要:1 堆(本质是一个数组) 1.1 定义 堆必须是一个完全二叉树() 1.2 完全二叉树的性质 性质1:只允许最后一行不为满 性质2:最后一行必须从左往右排序且没有间隔 1.3 堆的分类(有堆序性) 大根堆:父节点元素大于子节点元素 小根堆:父节点元素小于子节点元素 1.4 堆的存储 编号:从上到下,
阅读全文
摘要:1.双指针链表() 1.1 合并两个有序链表 关键点:创建两个指针和一个虚拟头结点 (单链表问题一个虚拟头结点会很方便(指向的值无所谓) 1.2 单链表的分解 key:创建两个虚拟头结点,用来存放不同种类的数据(创造一个新链表的时候常用虚拟头结点) 1.3 合并k个有序链表 key:优先级队列(二叉
阅读全文
摘要:计算Pow(x,n) 常规算法:暴力循环 时间复杂度O(n) 空间复杂度O(1) goal:寻找时间复杂度更小的算法,即O(logn)(最常见的O(logn)算法就是二分算法)由此想到递归算法 递推算法: 出口x=n; 递推关系f(n)=f(n/2)*f(n/2) class Solution {
阅读全文
摘要:哈希表大致有以下两类 1.hashmap(特点:可以存储key和value,keyset类似于hashset,不能重复,valueset则是keyset的一个映射)(在需要用到映射的时候考虑hashmap) 2.hashset(特点:查询的时间复杂度为O(1),里面存储的数据不能重复) 本题: 我的
阅读全文
摘要:我的方法(会tle) import java.util.*; class Solution { public List<List> groupAnagrams(String[] strs) { List<List> result = new ArrayList<>();//用来存放最终结果 List
阅读全文
摘要:我的方法:最简单的使用时间复杂度为O(n^2) import java.util.Arrays; import java.util.Collection; class Solution { public int[] twoSum(int[] nums, int target) { for (int
阅读全文

浙公网安备 33010602011771号