算法整理
不试一下怎么知道
傻不愣登的编程小白
展开
-
滑动窗口法
原理解析就当做左右指针来用使用场景求满足条件的最小/大连续子串。解法公式当满足条件时左指针右移,当不满足条件时右指针右移。// s 为给定的字符串,亦可为数组等public String slideWindow(String s) { int left = 0; int right = 0; while (right < s.length()) { // todo:根据right上的数据构造新的结果 right++;原创 2021-11-11 20:07:05 · 197 阅读 · 0 评论 -
前缀和 & 差分数组
使用场景当给定一组数据,需要根据条件选取几个数据进行重复运算,且该运算量较大时,可在构建这组数据时先算出所有条件下的值(即前缀和),再根据规律相加、相减等得到所需值。这样可以减少重复运算量。难点找到前缀和的定义找到所需条件和前缀和之间的关联例题303. 区域和检索 - 数组不可变(Easy)304. 二维区域和检索 - 矩阵不可变(Medium)560. 和为 K 的子数组(Medium)...原创 2021-11-09 22:15:00 · 52 阅读 · 0 评论 -
栈的使用
使用场景可用于成对匹配之类的原创 2021-06-04 09:48:39 · 86 阅读 · 0 评论 -
哈希表(NF!)
例题771. 宝石与石头(Easy)349. 两个数组的交集(Easy)原创 2021-05-31 10:38:11 · 64 阅读 · 0 评论 -
链表处理方式
链表定义方式class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; }}原创 2021-05-27 15:37:43 · 173 阅读 · 0 评论 -
素性测试 - 费马测试
描述费马测试确定一个数为素数的可能性。算法判断一个数n是否为素数,取比n小的数x,如果满足x^n % n = x的x值越多,则n为素数的可能性越大。-- 费马小定理但是,有些合数(非素数)也有以上特性(称为卡迈尔克数),所以该方法只能确定数字为素数的可能性。...原创 2021-05-18 10:12:36 · 468 阅读 · 0 评论 -
最大公约数 - 欧几里得算法
描述欧几里得算法(又称辗转相除法 ),可以实现给定两个数a,b,求出其最大公约数gcd。算法用较大数(记为max)对较小数(记为min)取余,当余数(记为remainder)不为零,则将余数remainder当做较小数min,原min作为max,重复max对min取余,直到余数为0,此时min为最大公约数gcd。原理设a > b,且a % gcd = 0,b % gcd = 0;则有(ma ± nb) % gcd = 0,其中m、n均为整数。设a ÷ b = n1余r1,则有r1 = a原创 2021-05-18 09:56:07 · 222 阅读 · 0 评论 -
位运算
基本运算几个常用位运算符:&与 |或 ^异或 ~非 >>右移 <<左移 >>>右移(高位补零)Tips判断奇偶性:num&1=0;为偶数,反之为奇数将末尾置1:num = num^1;将最后一个1置0:num = num&(num-1);例题1342. 将数字变成 0 的操作次数(Easy)461. 汉明距离(Easy)191. 位1的个数(Easy)1310. 子数组异或查询(Medium)1734. 解码异原创 2021-05-14 14:23:11 · 63 阅读 · 0 评论 -
广度优先搜索&深度优先搜索(NF!)
广度优先搜索思想将与第一个点直接连接的点标记为候选,在候选中选择最早成为候选的那个点进行操作;操作完成后,将该点下直接连接的点标记为候选;重复操作, 直到遍历结束。深度优先搜索思想逮着一个分支操作完,返回上一个最近的分支接着操作,直到遍历完。总结差异两种搜索方式的唯一差异就是确定下一个搜索的点是哪位前者在答案靠近原点时比较快,后者在答案靠近第一溜分支比较快...原创 2021-05-12 18:14:59 · 138 阅读 · 0 评论 -
查找算法
二分查找例题原创 2021-04-29 15:12:38 · 78 阅读 · 0 评论