6.5 note
分区起止位置标记
class Solution {
public:
vector<int> partitionLabels(string s) {
unordered_map<char, int> lastPos;
// 记录每个字符最后出现的位置
int n = s.size();
for (int i = 0; i < n; ++i) {
lastPos[s[i]] = i;
}
vector<int> ret;
int start = 0;
int end = 0;
for (int i = 0; i < n; ++i)
{ //遍历字符串
end = max(end, lastPos[s[i]]); // 更新
if (i == end)
{ // 到达终点
ret.push_back(end - start + 1);
start = i + 1; // 下一个起点
}
}
return ret;
}
};
奇偶 不另开两队列
+2 实现ret的方法
class Solution {
public:
vector<int> rearrangeArray(vector<int>& nums) {
int n = nums.size();
int i = 0, j = 1;
vector<int> ret(n);
for (int num : nums) {
if (num > 0) {
ret[i] = num;
i += 2;
} else {
ret[j] = num;
j += 2;
}
}
return ret;
}
};
股票的资本损益
select
stock_name,
sum(case when operation='buy' then -price else price end ) as 'capital_gain_loss'
from
Stocks
group by
stock_name
从股票交易表(Stocks)里,按股票名称分组统计买卖后的资金盈亏。
- 核心逻辑:
- 遇到买入操作(buy),用 -price 表示资金减少(花钱买股票);
- 遇到卖出或其他操作,用 +price 表示资金增加(卖股票赚钱);
- 最后把同一只股票的所有操作金额相加(sum),得出这只股票的总盈亏(capital_gain_loss)。
举例:
若某股票买入2次(价格100、200),卖出1次(价格300),
计算为: -100 -200 +300 = 0 ,即不赚不亏。
C++ 的 explicit 关键字用于禁止构造函数的隐式类型转换
- 没有 explicit 时:若构造函数只有一个参数,编译器会自动用该参数创建对象(隐式转换)。
例: int a = 1; MyClass obj = a; (假设 MyClass 有 MyClass(int) 构造函数,会隐式用 a 创建 obj )。
- 加上 explicit 后:禁止这种隐式转换,必须显式创建对象。
例: MyClass obj(a); (必须用括号明确调用构造函数)。
作用:避免意外的类型转换,让代码意图更清晰,减少潜在 bug。
heap的实现
二分查找
递归转动态规划
cpu vs gpu