刷题笔记
文章平均质量分 57
刷题过程中遇到的算法
Mr_zhangyj
这个作者很懒,什么都没留下…
展开
-
KMP算法——子串匹配
目录 1、什么是前缀函数 2、如何求前缀函数 3、解题思路 4、代码 KMP算法是一种字符串匹配算法,大大提高了字符串匹配的效率 例题:力扣28. 实现 strStr(),以下是根据该题的题解而写 1、什么是前缀函数 前缀函数是KMP算法的核心,记作 π(i),其定义如下:对于长度为m的字符串,其前缀函数 π(i)(0≤i<m) 表示 ss 的子串 s[0:i] 的最长的相等的真前缀与真后缀的长度(真前缀、真后缀就是不等于自身的的前缀与后缀)。特别地,如果不存在符合条件的前后缀原创 2022-03-26 23:48:20 · 1752 阅读 · 0 评论 -
颠倒二进制位
今天刷到力扣 190. 颠倒二进制位时,看到官方题解的位运算分治,感觉很骚,这里记录一下。 题目如下图: 目标是翻转二进制数,最简便的,可以用 API 来翻转 public class Solution { public int reverseBits(int n) { return Integer.reverse(n); } } 题解给出的是位运算分治,类似二分,每次二分将高位拼接到低位后面,最底层的递归交换奇位和偶位 public class Solut...原创 2022-03-21 12:59:04 · 270 阅读 · 0 评论 -
求二进制数中1的个数
目录 1、题目及要求 2、一般法 3、位运算优化 4、平行算法 今天刷到力扣 191. 位1的个数感觉很多算法很有意思,这里记录一下这些算法 1、题目及要求 2、一般法 一般法就是最简单的,移位在与 1 进行 & 运算,若为 1 则计数器加一 public class Solution { public int hammingWeight(int n) { int ret = 0; while(n != 0) { ..原创 2022-03-20 11:00:52 · 267 阅读 · 0 评论 -
插旗法 —— 解决区间重叠数量 (或最大的并行数量) 的题目
今天在力扣刷到731. 我的日程安排表 II 时,看到了一个非常巧妙的解法 —— 插旗法 具体题目如下图 在题解看到了一位大佬巧妙的思路,这是大佬的题解,大佬的写法是 C++ 的,这里我使用 Java 来写。 具体思路:每次插入一个行程,在形成开始的边界加一,结束的边界减一。加一相当于进入改行程,减一相当于结束该形成。由于 TreeMap 能够自动对存储的键从大到小进行排序,十分便捷,所以使用 TreeMap 来存储各个日程的边界及其出入情况。判断能否插入时,遍历 TreeMap 的所有键,...原创 2022-03-14 23:41:18 · 1764 阅读 · 0 评论 -
关于异或交换值的分析
今天在力扣刷到344. 反转字符串 这道题时 按照我的想法,就是从左向右遍历到一半,每次遍历交换对应的值,代码如下 public void reverseString2(char[] s) { int len = s.length; for(int i = 0; i < len / 2; i++) { char temp = s[i]; s[i] = s[len - i - 1]; s[len - i - 1] = temp; .原创 2022-03-11 22:10:25 · 290 阅读 · 0 评论