TBB

https://www.cnblogs.com/ybqjymy/p/13679446.html

https://www.ngui.cc/el/1408858.html?action=onClick

C++高性能编程笔记: https://www.zhihu.com/column/c_1477236044101353472

C++高性能编程视频: https://www.bilibili.com/video/BV1Ya411q7y4/?spm_id_from=333.788&vd_source=7230a052308bbb41976f248d2c778e3a

官网:https://link.springer.com/chapter/10.1007/978-1-4842-4398-5_2

tbb官网:https://spec.oneapi.io/versions/latest/elements/oneTBB/source/nested-index.html

超线程对内存密集型的计数效果更好(内存密集型就是计算少的)

阅读全文 »

hot 100

  • 1 两数之和

    • 时间复杂度O(n),空间O(n)
    • 哈希map, find, count(时间复杂度都为O(1), 最坏情况为O(n))
  • 2 两数相加 链表

    • 初始化pre,每次相加包括pre, 整除10更新pre
  • 3 无重复字符的最长子串

    • 滑动窗口+hashset
  • 4 寻找两个正序数组的中位数

    • 二分查找,边界,各种情况分析,易错,复习
  • 5 最长回文子串

    • 从中心往两边扩展,分为偶数和奇数情况
  • 10 正则表达式匹配

    • 动态规划
  • 11 盛最多水的容器

    • 双指针,策略:矮的往前走可能变大,高的往前走,由于高度还是矮的决定所以只能变小,所以最终,每次选择矮的一侧往前走,并更新面积
  • 15 三数之和

    • 排序+双指针, 三层循环的内两层可以改为相向逼近的双指针
    • 注意内层元素大于等于外层,但内外层可以可以元素相同,同层不能元素相同,还有双指针相遇时可以提前结束循环,细节很多,易错,复习
  • 17 电话号码的字母组合

    • 回溯,递归
  • 19 删除链表的倒数第 N 个结点

    • 官方要求一次遍历,但官方解答却是快慢指针,仍然是两次遍历
    • 直接遍历一次,并用数组存下每个节点指针,最有用数组直接O(1)就可以索引到倒数n+1个节点,实现删除了
  • 20 有效的括号

    • 栈,奇数个直接return false
  • 21 合并两个有序链表

    • 归并,注意定义一个空的节点pre,便于编程
  • 22 括号生成

    • 回溯,需要强化思路,复习
  • 23 并K个升序链表

    • 优先队列
  • 31 下一个排列

  • 32 最长有效括号

  • 33 搜索旋转排序数组

    • 看官方二分搜索的写法,更加清晰
    • 每次二分,总有一部分是有序的,若target在有序中,则正常二分,若不在,则是一个子问题,继续二分
  • 34 在排序数组中查找元素的第一个和最后一个位置

    • 学习如何二分查找找到第一个大于等于target的位置,第一个大于target的位置
  • 39 组合总和

    • 回溯
  • 42 接雨水

    • 不会,看解析,先理解动态规划,再理解双指针
    • 复习复习复习
  • 46 全排列

    • 回溯,swap方式动态维护数组,递归到底,维护的数组就是最终结果,直接加入res即可,不用额外维护一个排序结果的数组
  • 48 旋转图像

  • 49 字母异位词分组

    • 字母排序+ hashmap
  • 53 最大子数组和

    • 动态规划: f[i] = max(nums[i], f[i-1]) // 如果此时取了nums[i]则表示前面的舍弃,新的区间从i开始
  • 55 跳跃游戏

    • 贪心,看代码更易理解
  • 56 合并区间

  • 62 不同路径

    • 坐标型动态规划
  • 64 最小路径和

    • 坐标型动态规划
  • 70 爬楼梯

    • 动态规划
  • 72 编辑距离

    • 动态规划
  • 75 颜色分类

    • 三路快排思想
  • 76 最小覆盖子串

    • 滑动窗口 + hashmap记录字符满足个数,并记录
  • 78 子集

    • 回溯
  • 79 单词搜索

    • 递归回溯,开标记数组
  • 84 柱状图中最大的矩形

    • 单调栈,第一次学习,复习
  • 85 最大矩形

    • 84升级版,复习
  • 94 二叉树的中序遍历

    • 递归和非递归,栈
  • 96 不同的二叉搜索树

    • 动态规划,不太懂,复习
  • 98 验证二叉搜索树

    • 注意利用性质
      • 二叉搜索树中序遍历正好是升序
      • 递归,自顶向下,传递左子树和右子树的范围
  • 101 对称二叉树

    • 递归和迭代写法都不是很熟悉,需要复习复习
  • 102 二叉树的层序遍历

    • 用队列长度记录每层的元素个数,从而分层
  • 104 二叉树的最大深度

    • dfs,bfs
  • 105 从前序与中序遍历序列构造二叉树 待写

    • 递归构建,有难度,不熟悉,复习
      • 先序遍历的第一个元素就是中序遍历的中间位置,定位到中序遍历的中间位置,则可以将左右分为左子树和右子树,而左子树确定后可以确定长度,又可以反过来让先序遍历的数组明确左子树和右子树的区间,然后进行递归划分
    • 非递归写法待学习
  • 114 二叉树展开为链表 待写

    • 先前序遍历搜集顺序到数组中,再通过数组顺序构建链表
    • 先序遍历过程中展开为链表,利用栈
  • 121 买卖股票的最佳时机

    • 记录左边最小值,遍历一次
  • 124 二叉树中的最大路径和

    • 递归,官方解答思路更清晰
  • 128 最长连续序列 待写

    • 哈希
  • 136 只出现一次的数字 待写

    • 异或运算,性质,,,学习,记忆,异或运算符号
  • 139 单词拆分

    • 动态规划
  • 141 环形链表

    • 快慢指针
  • 142 环形链表 II

    • 141升级,巧妙,记忆
  • 146 LRU 缓存

    • 直接用list,stl的list就是双向指针
阅读全文 »

C++核心编程

本阶段主要针对C++==面向对象==编程技术做详细讲解,探讨C++中的核心和精髓。

阅读全文 »

C++提高编程

  • 本阶段主要针对C++==泛型编程==和==STL==技术做详细讲解,探讨C++更深层的使用
阅读全文 »