
leetcode刷题笔记
文章平均质量分 93
leetcode刷题笔记
alex-zhou96
男儿欲遂平生志,五经勤向窗前读。
展开
-
MySQL刷题
文章目录增删改查查找增加删除修改增删改查查找 select 目标表的列名或列表达式序列 from 基本表名和(或)视图序列 [where 行条件表达式] [group by 列名序列][having 组条件表达式] [order by 列名[asc | desc]]若ORDER BY子句后为指定ASC或DESC,默认使用ASC写法顺序:select–from–where–group by–having–order by执行顺序:fr原创 2020-09-12 14:41:54 · 501 阅读 · 0 评论 -
Java刷题总结
文章目录Java语法finally中执行顺序与return的关系Java中面向对象1、一些点2、实现接口与继承类重写方法的一些规则3、接口与抽象类的区别4、继承类与实现接口的区别5、类名的修饰符多线程Thread类的方法JVM1、内存回收的时机Java语法finally中执行顺序与return的关系1、finally块一定会执行,无论是否try…catch。2、finally前有return(finally中没有return语句),会先执行return语句,并保存下来,再执行finally块,最后原创 2020-09-12 09:58:57 · 737 阅读 · 0 评论 -
索引底层数据结构(查找)的小结 B树,B+树
文章目录索引的本质采用Hash精确查找采用二叉排序树作为索引的缺点采用红黑树作为索引的缺点B树的结构B+树结构MyISAM存储引擎索引实现InnoDB存储引擎实现B+树索引主键索引/聚集索引非聚集索引为什么InnoDB表必须有主键,并且推荐使用整型的自增主键为什么推荐使用整型的自增主键?联合索引MySqlB+树三行可以存放多少数据索引的本质采用Hash精确查找使用hash可以精确的查找,但是存在问题 select * from t where col>6对范围查找支持比较差)采用二叉排原创 2020-09-07 23:28:38 · 293 阅读 · 0 评论 -
堆排序
堆一顆完全二叉樹所有父節點大於子節點用数组表示完全二叉树用数组表示完全二叉树的好处是从任意一个节点出发,可以找到他的父亲节点和子节点对于一个节点i,它的父节点为(i-1)/2,它的左子节点为2*i+1,它的右子节点为2*i+2如何對堆進行調整(hepify)這是一個局部範圍的調整,對與數組中的第i個元素使得其找到對應的位置对于i节点找到其左右两个字节点,若其小于两个左右子节点则将其与左右两个子节点进行交换,之后不端向下调整即可完成heapify/**原创 2020-09-05 23:05:39 · 233 阅读 · 0 评论 -
笔试刷题分析
秋招的笔试的客观题部分做的很差,需要对其进行一定的整理记忆。下面这个就是对客观题的刷题的总结以牛客网为题库·计算机网络数据库操作系统算法Linux原创 2020-09-05 21:40:00 · 212 阅读 · 0 评论 -
LeetCode多线程的算法(面试常考的)
面试中手写的与线程有关的一些算法单例的各种模式生产者消费者模式死锁以及如何解决多线程环境下的加与减法交替打印等场景题2020/9/5开始整理 争取2020/9/10整理完原创 2020-09-05 21:31:05 · 389 阅读 · 0 评论 -
字符串的求和
注意进位以及若两个字符串的长度不相等如何进行简化运算 // 计算两个字符串的和 public String addStrings(String num1,String num2){ StringBuilder sb = new StringBuilder(); int carry = 0; for(int i=num1.length()-1,j=num2.length()-1;i>=0||j>=0;i--,j--){ .原创 2020-09-05 15:59:23 · 1859 阅读 · 0 评论 -
LeetCode38外观数列
外观数列对字符串进行统计,进行遍历,若发现是相等的字符则将相等字符的个数加1package com.zj.IString;import com.zj.CLinkedList.Problem2;/** * Author jzhou7 * Date 2020/8/18 * 外观数列 */public class Problem38 { public String countAndSay(int n) { if(n==1) return "1";原创 2020-09-05 15:57:16 · 237 阅读 · 0 评论 -
LeetCode实现LRU
题目要求借助JDK的LinkedHashMap参考一// 在插入一个新元素之后,如果是按插入顺序排序,即调用newNode()中的linkNodeLast()完成// 如果是按照读取顺序排序,即调用afterNodeAccess()完成// 那么这个方法是干嘛的呢,这个就是著名的 LRU 算法啦// 在插入完成之后,需要回调函数判断是否需要移除某些元素!// LinkedHashMap 函数部分源码/** * 插入新节点才会触发该方法,因为只有插入新节点才需要内存 * 根据 Has原创 2020-08-28 00:33:23 · 386 阅读 · 0 评论 -
LeetCode58 最后一个单词的长度
根据字符串中的空格,区分单词(很常见) // 从后往前 public int lengthOfLastWord1(String s) { int end = s.length() - 1; while(end >= 0 && s.charAt(end) == ' ') end--; if(end < 0) return 0; int start = end; while(st..原创 2020-08-27 23:55:01 · 239 阅读 · 0 评论 -
LeetCode字符串使用栈
文章目录LeetCode20 有效的括号LeetCode71 简化路径使用栈的情况一般是后面的元素会对前面的元素造成影响,因此将前面的元素加入栈中,后面的元素加入的时候和前面的元素进行比对,若发现某种特性则可以将栈中的元素进行弹出LeetCode20 有效的括号 /** * 有效的括号 * 使用栈 遍历整个字符串进行比较 * @param s * @return */ public boolean isValid(String原创 2020-08-27 23:53:09 · 432 阅读 · 0 评论 -
LeetCode之字符串与递归与回溯
文章目录LeetCode17 电话号码的组合LeetCode139单词的拆分LeetCod140 单词拆分IILeetCode22 括号生成LeetCode784 字符串大小写的全排列LeetCode17 电话号码的组合电话号码组合>>>>这道题和数组的组合很像,采用递归回溯处理即可,关键是如何对数据进行前置的处理。 public List<String> letterCombinations(String digits) { i原创 2020-08-27 23:51:57 · 603 阅读 · 0 评论 -
LeetCode49字母的异位词分组
这题比较巧妙,将字符串中的每个字符赋以hash质数对字符串中的每个值可以乘以对应的质数,若发现最终的乘积结果相等,则字符串为对应的易伟慈分组,利用到hashMap的变相处理方法/** * @Author zhoujian * @Date 2020/8/20 8:55 字母的异位词分组 自定义字符串的哈希规则,使用质数作为乘法因子(Java)https://leetcode-cn.com/problems/group-anagrams/solution/zi-d..原创 2020-08-27 23:50:05 · 241 阅读 · 0 评论 -
LeetCode使用动态规划解决字符串的问题
文章目录LeetCode5 最长回文子串LeetCode72编辑距离(两个字符串)LeetCode583 两个字符串的删除操作LeetCode139 单词拆分LeetCode91 解码方法LeetCode5 最长回文子串最长回文子串参考内容本题使用的方法是动态规划,这里需要找的是最长回文子串,首先第一步,我们需要定义dp数组的含义,定义二维布尔数组dp[i][j]dp[i][j]数组表示:字符串s[i...j]是否为回文子串,如果是,dp[i][j]=true,如果不是dp[i][j]=fa原创 2020-08-27 22:21:57 · 645 阅读 · 0 评论 -
LeetCode回文串
文章目录思路LeetCode125 验证回文串LeetCode680 验证回文串(最多删除一个字符)思路回文串的常见三种做法:双指针,栈和reverseLeetCode125 验证回文串验证回文串采用双指针对字符串进行双向遍历,若发现当前字符串不符合要求则跳过 /** * 验证回文串 * @param s * @return */ public boolean isPalindrome(String s) { s = s原创 2020-08-27 22:22:09 · 275 阅读 · 0 评论 -
LeetCode中翻转字符串的总结
文章目录方法LeetCode344翻转字符串LeetCode541 翻转字符串II(2k为一组)LeetCode557 翻转字符串中的单词LeetCode151 翻转字符串里的单词(单词不需要翻转)LeetCode345 翻转字符串中的元音字母方法将字符串转换为字符数组一般可以采用双指针对数组进行遍历若是对整个字符串进行翻转,则需要定义整个字符串的首尾指针若是对字符串中的一个个单词,则指针需要对字符穿中的一个个单词进行,(关键是如何判别单词,根据空格对字符串中的一个个单词进行区分)原创 2020-08-26 09:38:41 · 787 阅读 · 1 评论 -
LeetCode657 机器人能否返回原点
LeetCode机器人能否返回原点对字符串中字符的个数进行统计,UD为一组,RL为一组,若最终统计的结果为0则可以回到原点package com.zj.IString;/** * @Author Zhou jian * @Date 2020 ${month} 2020/8/25 0025 20:07 */public class Problem657 { /** * 统计机器人移动方位的次数 * @param moves * @return原创 2020-08-26 09:09:12 · 246 阅读 · 0 评论 -
LeetCode551学生出勤记录
学生出勤记录I遍历字符串,对某种特性进行统计,若A则直接进行加1,若是出现L则在package com.zj.IString;/** * @Author zhoujian * @Date 2020/8/24 23:15 */public class Problem551 { /** *使用指针进行遍历即可 * @param s * @return */ public boolean checkRecord(String s原创 2020-08-26 09:06:24 · 238 阅读 · 0 评论 -
LeetCode521 最长特殊序列I
最长特殊工艺序列I /** * 最长特殊序列 * @param a * @param b * @return */ public int findLUSlength(String a, String b) { if(a.equals(b)) return -1; return a.length() > b.length() ? a.length() : b.length();原创 2020-08-26 09:02:01 · 159 阅读 · 0 评论 -
LeetCode520 检测大写字母是否出现的位置合法
检测大写字母使用map对字符串中的每个字符出现的次数进行统计,分别按照大写字母与小写字母进行统计,最后对大写字母与小写字母的个数进行分析(按照题目的要求判断是否符合)/** * 检测大写字母 * @param word * @return */ public boolean detectCapitalUse(String word) { char[] cs = word.toCharArray(); int uppe原创 2020-08-26 08:59:12 · 224 阅读 · 0 评论 -
LeetCode459 重复的子字符串
重复的子字符串采用暴力的解法,对字符串中截取子字符串subStrung(0,i),对这个字符串重读i,i看看是否能够成package com.zj.IString;/** * @Author zhoujian * @Date 2020/8/24 22:12 重复的子字符串给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 */public class Problem459 { /原创 2020-08-26 08:54:37 · 210 阅读 · 0 评论 -
LeetCode443 压缩字符串
压缩字符串双指针,需要left和right对字符串中的连续单词进行遍历,则right-left为连续重复的次数,同时因为在元数组上进行修改,所以需要记录一个对数组中进行修改的尾指针位置,在修改的时候不断将新的值赋值给尾指针之后的位置package com.zj.IString;/** * @Author zhoujian * @Date 2020/8/24 21:44 * 压缩字符串 */public class Problem433 { /** * 压缩字符串原创 2020-08-26 08:49:42 · 261 阅读 · 0 评论 -
LeetCode434 字符串中单词数
字符串中单词数双指针,这里对字符串中每个单词的判定很简单就是以空格为界限,因此这里只需要根据空格来区分单词即可。package com.zj.IString;/** * @Author zhoujian * @Date 2020/8/24 21:34 */public class Problem434 { /** * 字符串中的单词书 * @param s * @return */ public int countSegmen原创 2020-08-26 08:43:59 · 280 阅读 · 0 评论 -
LeetCode387 字符串中的第一个唯一字符
字符串中的第一个唯一字符对于字符串中字符的次数问题,可以采用hashMap对每个字符出现的次数进行统计,先遍历以下字符串,然后再取出字符个数为1的字符package com.zj.IString;import java.util.*;/** * @Author zhoujian * @Date 2020/8/24 21:00 */public class Problem387 { // 使用字典进行遍历存储 public int firstUniqChar(原创 2020-08-26 08:40:30 · 221 阅读 · 0 评论 -
LeetCode383赎金信
赎金信暴力的方法,对need字符串中的每个字符出现的次数进行统计,然后在maganzie给出的字符串中的字符进行统计(采用hashMap)进行统计hash方法:对英文26个字母,每个字母计算其hash值,先对need计算对应的hash值的和,然后再对maganize计算其hash值,最终求取其差是否为0暴力的方法 // 使用缓存 public boolean canConstruct(String ransomNote, String magazine) { i原创 2020-08-26 08:36:43 · 245 阅读 · 0 评论 -
LeetCode字符串刷题分析与总结
2020/8/16 15:00 开始争取刷30-40道预计2020/8/26 完成原创 2020-08-16 15:11:37 · 1049 阅读 · 0 评论 -
LeetCode之滑动窗口(对于子串尤其适用)
2020/8/12原创 2020-08-12 10:57:44 · 403 阅读 · 0 评论 -
LeetCode312 戳气球
回溯思想很显然涉及求最值,没有任何奇技淫巧,一定是穷举所有可能的结果,然后对比得出最值所以说,只要遇到求最值的问题,首先要思考的就是:如何穷举所有可能的结果穷举主要有两种算法:就是回溯算法和动态规划,前者就是暴力穷举,而后者是根据状态转移方程推导状态如何将我们的扎气球问题转化为回溯算法呢?这个应该不难想到的,我们其实就是想穷举戳气球的顺序,不同的戳气球顺序可能得到不同的分数,我们需要把所有可能的分数中最高的找出来吧那么,这不就是一个[全排列]问题吗?int res = Integer.MIN.原创 2020-08-11 10:19:31 · 245 阅读 · 0 评论 -
子序列的问题
文章目录两种模板1 使用一维的dp数组(这个简单一点)2、使用一个二维的dp数组2.1、涉及两个字符串/数组时(比如最长公共子序列)2.2、只涉及一个字符串/数组时LeetCode120 三角形最小路径和LeetCode516最长回文子序列两种模板1 使用一维的dp数组(这个简单一点)int n = array.length;int[] dp = new int[n];for (int i = 1; i < n; i++) { for (int j = 0; j < i;原创 2020-08-09 21:19:31 · 380 阅读 · 0 评论 -
字符串的动态规划问题
参考内容文章目录处理两个字符串的动态规划问题LeetCode72 编辑距离LeetCode1143 两个字符串最长公共子序列处理两个字符串的动态规划问题一般来说,处理字符串的动态规划问题,可以借鉴参考下面这张图:第一步,一定要明确 dp 数组的含义。对于两个字符串的动态规划问题,套路是通用的。比如说对于字符串 s1 和 s2,一般来说都要构造一个这样的 DP table:LeetCode72 编辑距离编辑距离>>>参考题解>>>解决两个字符串的动态规划原创 2020-08-09 18:00:49 · 672 阅读 · 0 评论 -
动态规划套路
首先,动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用的比较多既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。动态规划就这么简单,就是穷举就完事了?我看到的动态规划问题都很难啊?首先,动态规划的穷举有点特别,因为这类问题存在重叠子问题,如果暴力穷举的话效率会很地下,所以需要[备忘录]或者[dp table]来优化穷举过程,避免不必要的计算。而且,动态规划一定会具备[最优子原创 2020-08-09 15:59:09 · 271 阅读 · 0 评论 -
LeetCode股票问题大全解
LeetCode上有6道股票问题,他们其实就是数组中是否存在数的差值最大,加上各种限制文章目录LeetCode121 买股票的最佳时机LeetCode122 买卖股票的最佳时机IILeetCode123 买卖股票的最佳时机IIILeeetCode188 购买股票的最佳时机IVLeetCode309购买股票含龙东时间LeetCode714买卖股票含手续费数组中两个数的差值最大数组中找出2对数使得其对应的差值的和最大数组中找出k对数使得其对应的差值的和最大数组中找出不限制对数使其对应的差值的和.原创 2020-08-08 22:05:11 · 424 阅读 · 0 评论 -
动态规划之背包问题
文章目录背包问题思路第一步明确状态:第二部明确dp数组定义:第三部:思考状态转移的逻辑第四部:思考baseCase第五步:整合代码:01背包问题基础版本LeetCode416 分割等和子集LeetCode322 凑硬币(从数组中挑选最小的元素凑成某个数)LeetCode518 从数组凑某个数的可能个数在动态规划中右一类题目,是基于背包问题进行衍生出来的,其核心就是 给顶一个数组 nums[i]根据某种要求从nums[i]种选择出某些数据,满足某种要求更细分是一堆集合中的元素是否可以重复取,那么在网上有原创 2020-08-08 14:44:39 · 490 阅读 · 0 评论 -
LeetCode226 翻转二叉树
翻转二叉树深度优先搜索(DFS) /** * 翻转二叉树 * @param root * @return * 后序遍历---从下向上 */ public TreeNode invertTree(TreeNode root) { if(root==null) return null; //翻转左子树 invertTree(root.left); /原创 2020-08-01 12:44:18 · 164 阅读 · 0 评论 -
二叉排序树小结
二叉排序树特点二叉排序树解题思路二叉排序树题型原创 2020-08-01 12:08:24 · 375 阅读 · 0 评论 -
二叉树递归之几个相似问题的分析--在递归树的时候统计树的某种特征
题型归纳总结在做树的问题时,发现一类问题很相似,他们都是可以使用dfs的方法,对树进行递归遍历,并计算某种树的统计值(也就是树的某种特征值,)dfs递归左右子树得到左子树和右子树的某种计算值(通常是深度或者其他需要符合题意的计算结果)统计的特征值往往是基于左子树和右子树的计算值,综合二者进行计算,在递归的过程中往往需要更新一个全局变量来满足题目要求的求最x值难点是:往往被递归绕进去,在做树的递归的时候,我们可以将树简单的看成根,左子树和右子树,分析出递归要求的是什么?递归的终止条件是什么?二叉原创 2020-07-28 20:23:35 · 232 阅读 · 0 评论 -
LeetCode之递归算法
递归三步曲何为递归?程序反复调用自身即是递归。我自己在刚开始解决递归问题的时候,总是去纠结这一层函数做了什么,它调用自身后的下一层函数又做了什么。。。。然后就会觉得实现一个递归解法十分复杂,根本就无法下手。这是一个思维误区,一定要走出来,既然递归是一个反复调用自身的过程,这就是说它的每一及的功能都是一样的,因此我们只需要关注一级递归的解决过程即可如上图所示,我们需要关心的主要是以下三点整个递归的终止条件一级递归需要做什么应该返回给上一级的返回值是什么因此,也就有了我们解递归题的三步原创 2020-07-23 20:44:41 · 392 阅读 · 0 评论 -
LeetCode154 寻找旋转排序数组中的最小值 II
寻找旋转排序数组中的最小值在LeetCode153的基础上进行改进关键重复的元素如何解决package com.zj.Aaaray.BinarySearch;/** * @Auther Jian Zhou * @Date 2020/7/19 * 寻找旋转排序数组中的最小值II */public class Problem154 { public int findMin(int[] nums) { int length = nums.length;原创 2020-07-19 22:09:26 · 160 阅读 · 0 评论 -
LeetCode 153寻找旋转排序数组中的最小值
寻找旋转排序数组中的最小值>>>思路二分法可以解决这个问题,因为旋转排序数组,几乎有序的数组,也可以通过比较特定位置的元素的值得判断达到减治的效果(逐渐缩小搜索区间)。采用中间数与右边数的比较判断分析若中间数比右边数大nums[middle]>nums[right],则[middle,right]区间一定不是有序的,在[left,middle]区间数字有序,因此最小值一定不会再[left,midddle]区间,可能会在[middle+1,right]反之 pub原创 2020-07-19 22:03:44 · 146 阅读 · 0 评论 -
LeetCode81 搜索旋转排序数组II(数组中含有重复的元素)
链接思考这道题是在LeetCode33题目的基础上进行提升的,关键是如何判断重复,当numd[middle]==nums[left]时的分支选择;当nums[left]==nums[middle]说明在[left,middle]区间内是无序的,则可以若 nums[left]==target直接返回,否则left=left+1代码package com.zj.Aaaray.BinarySearch;/** * @Auther Jian Zhou * @Date 2020/7原创 2020-07-19 20:51:14 · 344 阅读 · 0 评论