一.前缀和
vector<LL> s(n + 1);
for(int i = 1; i <= n; ++ i)
s[i] = s[i - 1] + a[i - 1];
开辟n + 1 赋值(1,n]。
第i个s[]表示前i个数的和,包括i
二.回文问题
1.lc5求最长的回文子串
dp求解
2.lc5666回文串分割
三.链表相关
1.反转链表-lc206题 剑指offer24
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//遍历节点
ListNode* p = head;
//前向节点
ListNode* pre = nullptr;
//记录最终的头节点(原尾节点) 也可以不用
ListNode* lhead = nullptr;
while(p != nullptr)
{
//下一个节点
ListNode* q = p->next;
//当尾部节点为空时,说明来到了最后一个
if(q == nullptr)
lhead = p;
//反过来指
p->next = pre;
pre = p;
p = q;
}
return lhead;
}
};
stl容器自定义比较
第一种
static bool cmp(const pair<int, int>& p1, const pair<int, int>& p2){
return p1.second > p2.second;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> qs(cmp);
第二种
class cmp2{
public:
bool operator()(const pair<int, int>& p1, const pair<int, int>& p2){
return p1.second > p2.second;
}
};
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp2> qs;
stl greater vs less
map/set greater代表升序 , less代表降序
priority_queue/sort greater代表降序,less代表升序
https://blog.csdn.net/liqinzhe11/article/details/79278235