摘要: 一、简介 回溯法(backtracking)是优先搜索的一种特殊情况,又称为试探法,常用于需要记录节点状态的深度优先搜索。通常来说,排列、组合、选择类问题使用回溯法比较方便。 解题套路: result = [] def backtrack(路径, 选择列表): if 满足结束条件: result.a 阅读全文
posted @ 2023-04-08 21:36 blogzzt 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 《将博客搬至CSDN》 阅读全文
posted @ 2023-04-08 16:55 blogzzt 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 一、引子 std::vector<bool> 经常应用在leetcode刷题中。 但是effective stl 不建议使用std::vector<bool>,原因是: 严格意义上讲,vector<bool> 并不是一个 STL 容器; vector<bool> 底层存储的并不是 bool 类型值。 阅读全文
posted @ 2023-04-08 16:50 blogzzt 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 顾名思义,分治问题由“分”(divide)和“治”(conquer)两部分组成,通过把原问题分为子问题,再将子问题进行处理合并,从而实现对原问题的求解。我们在排序章节展示的归并排序就是典型的分治问题,其中“分”即为把大数组平均分成两个小数组,通过递归实现,最终我们会得到多个长度为1 的子数组;“治” 阅读全文
posted @ 2023-04-02 23:32 blogzzt 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 417. 太平洋大西洋水流问题 虽然题目要求的是满足向下流能到达两个大洋的位置,如果我们对所有的位置进行搜索,那么在不剪枝的情况下复杂度会很高。因此我们可以反过来想,从两个大洋开始向上流,这样我们只需要对矩形四条边进行搜索。搜索完成后,只需遍历一遍矩阵,满足条件的位置即为两个大洋向上流都能到达的位置 阅读全文
posted @ 2023-04-02 21:34 blogzzt 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 雷洪教授的《多核并行高性能计算OpenMP》一书中给出了程序优化的思路: 对串行程序进行并行优化建议遵循如下步骤: (1)分析串行代码中可并行化部分,尤其是密切关注程序的热点代码(热点循环、热点函数和热点子程序),这是并行优化中最重要的一个步骤。围绕程序的热点代码进行并行化是减小编程工作量、实现高效 阅读全文
posted @ 2023-04-02 15:44 blogzzt 阅读(112) 评论(0) 推荐(0) 编辑
摘要: leetcode 347. 前 K 个高频元素 顾名思义,桶排序的意思是为每个值设立一个桶,桶内记录这个值出现的次数(或其它属性),然后对桶进行排序。 红色代表频率。 最后,我们从后往前遍历,直到找到k个旧桶。 class Solution { public: vector<int> topKFre 阅读全文
posted @ 2023-04-01 11:47 blogzzt 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 指针和数组之间的替换 : 一维数组和指针: 数组名是数组的首地址 数组名是一个常指针 不可修改 可以对指针操作来访问元素 访问数组的方式:1.直接访问数组a[5]; 2.使用指针*p 等价于a[0]*(p+1)等价于a[1] 3.修改数组的值a[5]=10;*(p+5)=10; 实例: main() 阅读全文
posted @ 2023-03-26 11:21 blogzzt 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 快速排序 快速排序算法的实现思路是: 从待排序序列中任选一个元素(假设为 pivot)作为中间元素,将所有比 pivot 小的元素移动到它的左边,所有比 pivot 大的元素移动到它的右边;(这一步被称为「划分 partition」) pivot 左右两边的子序列看作是两个待排序序列,各自重复执行第 阅读全文
posted @ 2023-03-19 23:06 blogzzt 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 具体到代码上,二分查找时区间的左右端取开区间还是闭区间在绝大多数时候都可以,因此有些初学者会容易搞不清楚如何定义区间开闭性。这里我提供两个小诀窍,第一是尝试熟练使用一种写法,比如左闭右开(满足C++、Python 等语言的习惯)或左闭右闭(便于处理边界条件),尽量只保持这一种写法;第二是在刷题时思考 阅读全文
posted @ 2023-03-14 23:32 blogzzt 阅读(618) 评论(0) 推荐(0) 编辑