lc39_组合总和 【TED演讲】解决任何问题的五个步骤 Golang-优雅处理可选参数 http.Transport连接池
Algorithm
lc39_组合总和
思路: 无限背包获取目标值
达到背包容积有多少种放置方式。
用 dp[n][m]
表示容量为 n 时,用 m 种物品的总组合数。
状态转移:
容积为i.以及j种物品.
dp[i][j] = dp[i-candidate[1..j]][j - 1] + 1
感觉状态转移还是不够清晰,学习一下题解吧。
发现没有认真看题目,不是方案数,是具体方案…
所以是枚举遍历…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
class Solution {
public:
void dfs(vector<int>& candidates, int target, vector<vector<int>>& ans, vector<int>& combine, int idx) {
if (idx == candidates.size()) {
return;
}
if (target == 0) {
ans.emplace_back(combine);
return;
}
// 直接跳过
dfs(candidates, target, ans, combine, idx + 1);
// 选择当前数
if (target - candidates[idx] >= 0) {
combine.emplace_back(candidates[idx]);
dfs(candidates, target - candidates[idx], ans, combine, idx);
// 因为combine是引用,加上是其他dfs子遍历,所以一定要帮当层的值去掉
combine.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> ans;
vector<int> combine;
dfs(candidates, target, ans, combine, 0);
return ans;
}
};
|
Review
【TED演讲】解决任何问题的五个步骤
快速行动修复局面好过快速行动打破局面
步骤:
- 搞清楚真正的问题,保持好奇心;
- 进行实验,尝试解决问题,不一定成功,但值得尝试;
- 结交新朋友,获得新想法,优化解决问题的方案:
- 讲自身故事,有助于理解过去经历、现在、将来的关系,也能激发他人;
- 尽力突破自我去行动,提升效率
然后就是有问题,立马行动。
Tips
Golang-优雅处理可选参数
Share-http.Transport
上周推荐了 fatih/pool 的 tcp 连接池。但是这周看到了同事推荐的好文章:
http.Client的连接行为控制详解
通读全文之后,知道了就是把原来的pool tcp连接池直接改成 http.Transport 连接池
然后需要注意这5个参数:
- 每个连接池最大容量:MaxIdleConnsPerHost
- 每个连接池空闲时要保持的空闲连接数:MaxIdleConnsPerHost
- 每个空闲连接的最长保持时间:IdleConnTimeout
- 是否启动 KeepAlive: DisableKeepAlives
- http.Client连接超时设置: Timeout
1
2
3
4
5
6
7
8
9
10
11
|
tr := &http.Transport{
MaxConnsPerHost: maxConnections,
// 默认保留最大连接数一半的连接不销毁,但是超过10s销毁
MaxIdleConnsPerHost: maxConnections / 2,
IdleConnTimeout: 10 * time.Second,
DisableKeepAlives: !keepAlive,
}
channel.httpClient = http.Client{
Transport: tr,
Timeout: time.Duration(timeout) * time.Millisecond,
}
|
最大的好处就是 http.Client
自动控制连接池的创建和关闭,完全不用上层接口关心,还能控制 Idle 池超时关闭,非常舒服。