-
树状数组和线段树
树状数组 核心应用:动态快速地求前缀和 O(logn)
单点修改:在某个位置上加上一个数(修改这个数)
区间查询:求某一个前缀和
区间修改:配合差分思想转换为已知问题
单点修改:配合差分思想转换为已知问题
思考:为什么不直接使...
-
92. 递归实现指数型枚举从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
思路1—二进制表示既然这n个数每一个数既可以选也可以不选,我们就可以用二进制表示来表示每一位选(1)或是不选(0)。
代码实现
12345678910v...
-
贪心算法
证明困难,没有常用的套路
对于区间问题:
左端点排序
右端点排序
双关键字排序
如上图,局部极值不一定是权重最优解,因此只有一个问题是单峰的,才可以用贪心算法来解
区间选点算法思路
将每个区间按右端点从小到大排序
从前往后依次枚举...
-
快速排序分析题目描述给定你一个长度为 n 的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
样例输入格式输入共两行,第一行包含整数 n。
第二行包含 n个整数(所有整数均在 1∼1e9范围内),表示整个数列...
-
KMP算法浅析
KMP算法在各种参考书中均有讲解,但均较为复杂,且不易于理解其中原理,现佐以笔记,记录自己的学习心得
因为kmp算法相对抽象,因此本文大多辅以图像方便理解
参考视频:https://www.bilibili.com/video/BV1...
-
快排的应用第k个数给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k个数。
输入格式
第一行包含两个整数 n 和 k
第二行包含 n 个整数(所有整数均在 1∼10^9 范围内),表示整数数列。
输出格式...
-
C++标准库动态内存动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会被销毁。
静态内存
用来保存局部地static对象、类static数据成员、以及定义在任何函数之外地变量。
栈内存
栈内存用来保存定义在函数内的非s...
-
Competitive Programming
如何去练习竞赛性质的编程?
意见或指导Radewoosh’s blog他认为你需要将生命的一部分给予CP。他所指的不是时间,而是一部分思维(a part of their minds)。在不断练习以及...
-
问题空间搜索DFS
执着的算法
思想
会尽可能往深了搜,搜不到了就回溯,每一次回溯完之后判断当前是不是所有的路径均已遍历,若均已遍历,再进行回溯,否则搜索未遍历的路径
两个重要概念
回溯
注意恢复现场
剪枝
最优性剪枝:当前的路径判断一定不...
-
如何去阅读问题陈述基本规则
得到纯数学模型
更短
更简单
数据的限制
实例样本:验证得到模型的整确性
查看备注note
尝试去找熟悉的模式或范式(模板等)
努力去找一些奇怪的事情,你没有预期的那种(maybe cornerstone)
...