3.13
回溯的题可以先把二叉树画出来,能帮助思考!!!
Leetcode
组合总和Ⅲ
class Solution {
public:
vector<vector<int>>ans;
vector<int>path;
void backtracing(int k, int n, int index){
if(path.size() == k && n == 0){
ans.push_back(path);
return;
}
for(int i = index ; i <= 9 ; i++){
path.push_back(i);
backtracing(k, n-i, i+1);
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
backtracing(k, n, 1);
return ans;
}
};
优化:
class Solution {
public:
vector<vector<int>>ans;
vector<int>path;
void backtracing(int k, int n, int index){
if(path.size() == k){
if(n == 0) ans.push_back(path);
return;
}
for(int i = index ; i <= 9 ; i++){
path.push_back(i);
backtracing(k, n-i, i+1);
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
backtracing(k, n, 1);
return ans;
}
};
最大子数组和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int cur = nums[0], prev = nums[0];
for(int i = 1 ; i < nums.size() ; i++){
if(prev < 0) prev = 0;
prev += nums[i];
cur = max(cur, prev);
}
return cur;
}
};
买卖股票最佳时机2
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit = 0, prev = prices[0];
for(int i = 1 ; i < prices.size() ; i++){
if(prices[i] > prev) profit += (prices[i] - prev);
prev = prices[i];
}
return profit;
}
};
另一种思路:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit = 0;
for(int i = 1 ; i < prices.size() ; i++){
profit += max(prices[i] - prices[i-1], 0);
}
return profit;
}
};
试试动态规划:
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>>dp(2, vector<int>(prices.size(), 0));
dp[0][0] = 0, dp[1][0] = -prices[0];
for(int i = 1 ; i < prices.size() ; i++){
dp[1][i] = max(dp[1][i-1], dp[0][i-1] - prices[i]);
dp[0][i] = max(dp[0][i-1], dp[1][i-1] + prices[i]);
}
return dp[0][prices.size()-1];
}
};
计网
DHE算法
DH算法分为两种实现:static DH 和 DHE(ephemeral)
前者已经不常用了,因为服务器的私钥保持不变,在大量的数据传输中私钥容易被破解,不具备向前安全性
每次通信过程两边随机生成私钥
ECDHE
在DHE的基础上提高了计算性能,引入椭圆曲线
四次握手,但在第四次握手前还没完全建立连接前,就开始了数据传递
第一次握手:client hello,tls协议版本,密码套件列表,随机数
第二次握手:server hello, tls版本,密码套件列表,随机数,选择的椭圆曲线,椭圆曲线G点,椭圆曲线公钥,证书
第三次握手:椭圆曲线公钥,摘要,改变加密算法
第四次握手:改变加密算法,摘要
其他
而我们在0.001处入口处努塞尔数偏大
因为听说雷诺数越大,入口努塞尔数越小
都差了一点,就算把长宽比拉上去,因为想提高Re数,又要保证无量纲长度大于0.1,长宽比就得上去
50 0.53 密度变化大 997-2000
50 0.52不行1900
50 0.51 1600
50 0.505 1500
40 0.505 1601
60 0.505 功成
4核8线程,1个物理核心裂开为2个逻辑核心(超线程技术)
操作系统
cpu cache由多个cpu line组成,cpu line由各种标志(tag) + 数据块组成(data block)
cpu写数据,将数据从CPU Cache里写入到内存中,两种方法:
写直达
不管数据在不在cpu cache中,都要写到内存中
写回
当CPU进行写操作时,若是cpu cache里没有对应的数据,需要检查其是否为脏
若是脏的就先把他的数据写入到内存中,然后再把新数据写入到cpu cache中,把它标记为脏的
若不为脏,就把它写入到cpu cache中,并且把它标记为脏的
若是cpu里有对应数据,就把数据更新到cpu cache中,并把它标记为脏的
cpu的缓存一致性问题
一个cpu把一个数据写回还没同步到内存中,另一个cpu从内存中读到的是错误的数据
办法:
写传播
一个cpu更改了数据要同步到其他cpu
总线嗅探
cpu需要监听总线,若是其他cpu有改变数据,而恰巧该数据也在自己的cpu cache中,那么自身也需要更改。
缺点:负载太大,改进MESI
MESI
M modified 脏标记
E exclusive 一致 只有一个cpu在对数据进行操作,只在一个cpu的cpu cache中
S shared 一致
I invalidated 失效的
当cpu中cache line状态为独享或者已修改时,再改变就不需要同步给其他cpu,减小总线带宽压力
事务的串行化
顺序要一致,A先B后,那么C、D收到的应该都是这个顺序;
须达到两点要求,操作同步;锁,只有拿到了锁才能更改数据
以后吃完饭不要玩手机啦,这么多东西要学西巴