![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题笔记
文章平均质量分 54
暗色光
学无止境,欢迎交流
展开
-
排序算法——十大排序算法的图示与实现
十大排序算法概览比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。前七种为比较类排序,后三种为非比较类排序。稳定性:如果a=b,且a在b前面,排序之后仍能保证a在b前面,则为稳定的。插入排序逻辑将左端第一个元素视为有序,然后遍历后面的元素,逐步插入到有序序列中。代码实现//插入排序void原创 2021-11-12 16:59:52 · 1307 阅读 · 0 评论 -
剑指Offer14-剪绳子1&2
题目描述–剪绳子1思路分析首先要分析出怎么切分是最优方案,显然和一定时,分成相等的数的乘积最大。用简单的数学归纳的思想可以发现,4对应2*2,5对应2x3,6对应3x3,7对应3x2x2,8对应3x3x2,显然分为3是最优选,然后是2。由不等式也可解出极值点是e约为2.7,距离3最近。动态规划首先最直接会想到用动态规划的思想解题,先考虑切3,判断切3后的值是否大于dp中对应的值,依此向前填充dp矩阵,然后考虑切2int cuttingRope(int n) { if(n &l原创 2021-08-24 12:38:02 · 93 阅读 · 0 评论 -
深度优先搜索(解题剑指Offer12、13)
剑指Offer12-矩阵中的路径 题目描述思路分析显然这是一个深度优先搜索的题,遍历整个矩阵寻找word的首字母,然后对首字母位置的上下左右四个方向进行延展,判断第二个字母是否存在,依此方法直到找到整个word字符串,即为true。为了避免重复遍历某个位置,在一条分支走过该位置时将其置为数字等不影响的字符作为标记,由于不同分支互不影响,所以在该分支结束时需要将标记恢复。代码bool exist(vector<vector<char>>& board, string原创 2021-08-21 16:30:46 · 69 阅读 · 0 评论 -
快速幂算法
快速幂算法假设求pow(2, 20),一次一次的累乘非常耗时间,需要进行20次运算。将指数20使用二进制表示为10100。则2^20 = 216*24可以看出每当二进制位为1时将对应2的幂指数乘到结果上即可。从最低位开始迭代,在迭代时将底数进行自乘,可得到对应的幂。而计算机存储数据时正是以二进制存储的,使用二进制不需要进行转换,对于指数需要判断它的最低位是否为1,然后将其右移一位继续判断,直到指数为0。代码实现double quick(double x, long long n) { dou原创 2021-07-06 19:37:13 · 111 阅读 · 0 评论 -
剑指offer38题
问题描述剑指offer38题问题分析最直观的想法就是使用深度搜索遍历每一个分支,找出所有组合,但是此问题要求结果中的字符串不重复,这就需要我们在使用DFS时进行剪枝,即是在每一层将重复的字符去除。以abc和aab为例,红色表示被去除的分支。代码实现dfs剪枝vector<string> result;void perm(unsigned start, string str) { if (start == str.size() - 1) { result.push_ba原创 2021-06-23 12:15:28 · 205 阅读 · 0 评论 -
01背包问题详解
问题描述有一堆物品,具有各自的重量、价值,有一个一定容量的背包装取物品,得到最大的价值。由于每个物品都有装或不装两个状态,即01状态,所以称为01背包问题。暴力破解最直接的思路是利用深度优先的思想,遍历所有的方案,每个物品有两种状态,共有2^n种可能方案。动态规划采用动态规划更加节约空间和时间。实例分析最后一块石头的重量 IIclass Solution {public: int sum = 0; int lastStoneWeightII(vector<int&原创 2021-06-13 16:12:13 · 8962 阅读 · 0 评论