leetcode-动态规划题型
动态规划是一种解决问题的算法策略,它通常用于解决涉及最优化问题的情况,比如找到最短路径、最大价值等等。动态规划算法的核心思想是将一个大问题分解成一系列小问题,并记住已经解决的小问题的答案,以避免重复计算。这种方法有助于提高计算效率。
动态规划的一般步骤如下:
- 定义问题: 首先,将大问题分解成小问题,并明确定义每个小问题的状态。这些状态是问题的不同方面,通常与问题的输入相关。
- 找到递推关系: 接下来,确定每个状态如何与其他状态相关联。这通常通过递推关系或方程式来完成,它们描述了一个状态如何由一个或多个先前状态计算得出。
- 初始化: 对于问题中的一些状态,需要初始化其初始值,以便递推关系可以开始工作。
- 计算和记忆: 使用递推关系,从最小的状态开始,逐步计算并记住每个状态的值。这些值可以保存在表格、数组或字典中,以便后续使用。
- 解决大问题: 通过计算小问题的值,最终可以解决整个大问题。这通常是在表格中找到最终状态的值,然后根据需要提取答案。
- 优化: 可能需要进一步优化算法以减少内存和时间的消耗。
买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
pegasus项目记录
Table的管理
在Pegasus里,table相当于一个namespace,不同的table下可以有相同的(HashKey, SortKey)序对。在使用table前,需要在向MetaServer先发起建表的申请。
MetaServer在建表的时候,首先对表名以及选项做一些合法性的检查。如果检查通过,会把表的元信息持久化存储到Zookeeper上。在持久化完成后,MetaServer会为表中的每个分片都创建一条记录,叫做PartitionConfiguration。该记录里最主要的内容就是当前分片的version以及分片的composition(即Primary和Secondary分别位于哪个ReplicaServer)。
在表创建好后,一个分片的composition初始化为空。MetaServer会为空分片分配Primary和Secondary。等一个分片有一主两备后,就可以对外提供读写服务了。假如一张表所有的分片都满足一主两备份,那么这张表就是可以正常工作的。
如果用户不再需要使用一张表,可以调用删除接口对Pegasus的表进行删除。删除的信息也是先做持久化,然后再异步的将删除信息通知到各个ReplicaServer上。等所有相关ReplicaServer都得知表已经删除后,该表就变得不可访问。注意,此时数据并未作物理删除。真正的物理删除,要在一定的时间周期后发生。在此期间,假如用户想撤回删除操作,也是可以调用相关接口将表召回。这个功能称为软删除。
菜谱大全
深入理解C++11:C++11新特性解析与应用
稳定性与兼容性
断言
1 | #ifdef NDEBUG |
异常
如果noexcept修饰的函数抛出了异常,编译器可用选择直接调用std::terminate()函数来终止程序的运行,如析构函数不应该抛出异常,所以默认是noexcept(true)。在c++98中,使用throw()来声明不抛出异常的函数。
办公软件推荐
ditto,记录复制信息,不需要重复复制。
snipaste,截图可以定在窗口,不需要来回切页面。
vscode:tabnine插件提示代码,设置自动换行”editor.wordWrap”: “on”.
brew安装慢或者没有反应,默认是github的源是国外的所以访问慢,所以需要换国内源,这里换的是清华的源
1 | git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git |
nginx配置与开发
配置
rewrite regex replacement [flag];
rewrite的含义:该指令是实现URL重写的指令。
regex的含义:用于匹配URI的正则表达式。
replacement:将regex正则匹配到的内容替换成 replacement。
flag: flag标记。
flag有如下值:
- last: 本条规则匹配完成后,继续向下匹配新的location URI 规则。(不常用)
- break: 本条规则匹配完成即终止,不再匹配后面的任何规则(不常用)。
- redirect: 返回302临时重定向,浏览器地址会显示跳转新的URL地址。
- permanent: 返回301永久重定向。浏览器地址会显示跳转新的URL地址。
比如rewrite ^/(.*) http://www.baidu.com/$1 permanent;
说明:
git使用记录
git
1 | # 更新所有tags: |
要将一个分支(例如,名为 source_branch)中的提交更改复制到另一个分支(例如,名为 destination_branch),你可以使用 git cherry-pick 命令。这个命令会将指定的提交复制到当前分支。
TortoiseGit
深度优先搜索和动态规划
leetcode排序和搜索常见面试算法题
排序和搜索常见面试算法题