随笔分类 -  # 基础算法

摘要:文章目录 单调栈概述例题总结 单调队列概述例题总结 单调栈概述 定义: 单调栈是在栈的先进后出基础之上额外添加一个特性:从栈顶到栈底的元素是严格递增(or递减)。对于单调递增栈,若当前进栈元素为 e ,从栈顶开始遍历元素,把小于 e 或者等于 e 的元素弹出栈,直接遇到一个大于 e 的元素或者栈为空 阅读全文
posted @ 2022-12-02 20:38 chanxe 阅读(53) 评论(0) 推荐(0) 编辑
摘要:文章目录 概述百度百科: 思路讲解朴素解法kmp优化next数组 例题总结 概述 百度百科: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息 阅读全文
posted @ 2022-11-24 10:50 chanxe 阅读(29) 评论(0) 推荐(0) 编辑
摘要:文章目录 离散化例题 合并区间例题 总结 离散化 我自己的定义:一个超大数组,需要对数组中有限的位置进行操作,而离散化是将这有限的位置挨个存进一个数组a,并进行排序和去重,然后将需要的操作映射到一个数组b上,顺序和数组a一致。作用:面对一个无限的序列时的有限操作,有效的压缩了空间 例题 假定有一个无 阅读全文
posted @ 2022-09-27 20:35 chanxe 阅读(42) 评论(0) 推荐(0) 编辑
摘要:文章目录 双指针的形式双指针的作用模板例题最长连续不重复子序列数组元素的目标和判断子序列 总结 双指针的形式 指向两个序列维护一个序列的一段区间 双指针的作用 对暴力遍历的优化 模板 j = 0 或者 右边界 for i in range(len(nums)) : while (j 满足边界条件 a 阅读全文
posted @ 2022-09-26 20:55 chanxe 阅读(32) 评论(0) 推荐(0) 编辑
摘要:前缀和 数值数组A,前缀和数组S,满足如下定义 S[i] = A[0] + A[1] +…+A[i] 应用:求一段数的和 A[i ~ j] = S[j] - S[i - 1] 使得原本O(n)的操作,只需要O(1) 例题: 输入一个长度为 n 的整数序列。 接下来再输入 m 个询问,每个询问输入一对 阅读全文
posted @ 2022-09-23 11:26 chanxe 阅读(119) 评论(0) 推荐(0) 编辑
摘要:模拟人在运算时,从小位运算并进位借位 Tips 大数要用列表来存,输入时字符串可以用list转换为列表关于进位借位问题,都是向大位进位或者借位,因此将列表reverse对于一些特殊情况,结果得0或者高位为0,则需要在开始或者最后考虑 几道例题 高精度加法 给定两个正整数(不含前导 0),计算它们的和 阅读全文
posted @ 2022-09-23 08:45 chanxe 阅读(200) 评论(0) 推荐(0) 编辑
摘要:归并排序:分治 待排序数组为nums, 左边界为l,右边界为r 确定分界点:mid = (l + r)>> 1递归分隔合并:双指针法 def merge_sort(nums, l, r) : if l >= r : return mid = (l + r) >> 1 merge_sort(nums, 阅读全文
posted @ 2022-09-21 21:45 chanxe 阅读(57) 评论(0) 推荐(0) 编辑
摘要:快速排序基本思想:分治 下面假设对nums数组排序, l为左边界, r为右边界 确定分界点:可以是nums[l]、nums[r]、nums[(l + r) >> 2],设为d调整区间:将小于d的元素放到相对于大于d元素的左边,大于d的放在右边递归处理左右两端 调整区间的两种方法 每次调整区间用三个列 阅读全文
posted @ 2022-09-20 20:12 chanxe 阅读(45) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示