一.前缀和

    1. vector<LL> s(n + 1);
    2. for(int i = 1; i <= n; ++ i)
    3. s[i] = s[i - 1] + a[i - 1];

    开辟n + 1 赋值(1,n]。
    第i个s[]表示前i个数的和,包括i


    二.回文问题
    1.lc5求最长的回文子串
    dp求解
    2.lc5666回文串分割
    三.链表相关
    1.反转链表-lc206题 剑指offer24

    1. class Solution {
    2. public:
    3. ListNode* reverseList(ListNode* head) {
    4. //遍历节点
    5. ListNode* p = head;
    6. //前向节点
    7. ListNode* pre = nullptr;
    8. //记录最终的头节点(原尾节点) 也可以不用
    9. ListNode* lhead = nullptr;
    10. while(p != nullptr)
    11. {
    12. //下一个节点
    13. ListNode* q = p->next;
    14. //当尾部节点为空时,说明来到了最后一个
    15. if(q == nullptr)
    16. lhead = p;
    17. //反过来指
    18. p->next = pre;
    19. pre = p;
    20. p = q;
    21. }
    22. return lhead;
    23. }
    24. };

    stl容器自定义比较
    第一种

    1. static bool cmp(const pair<int, int>& p1, const pair<int, int>& p2){
    2. return p1.second > p2.second;
    3. }
    4. priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> qs(cmp);

    第二种

    1. class cmp2{
    2. public:
    3. bool operator()(const pair<int, int>& p1, const pair<int, int>& p2){
    4. return p1.second > p2.second;
    5. }
    6. };
    7. 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