随笔分类 - 算法
动态规划
摘要:动态规划 动态规划是一种解决多阶段决策问题的优化方法,把多阶段转化为一系列但阶段问题,利用各阶段之间的关系,逐个求解。 1.动态规划问题的解法 确定遍历顺序:逆序遍历、顺序遍历 2.动态规划问题的性质 能采用动态规划求解的问题的一般要具有3个性质: 最优性原理:如果问题的最优解所包含的子问题的解也是
时间复杂度和空间复杂度
摘要:算法的时间复杂度和空间复杂度 算法的时间复杂度 时间频度T(n) 一个算法中的语句执行次数称为语句频度或时间频度。记作T(n) 时间复杂度O(f(n)) 一般情况下,算法中的基本操作语句的重复执行次数(即时间频度)是问题规模n的某个函数,用T(n)表示。若有某个辅助函数f(n),使得当n趋近于无穷大
逆波兰算法、中缀表达式转后缀表达式
摘要:一、前、中、后缀表达 前缀表达式(波兰表达式、Prefix expression) 又称为波兰表达式,前缀表达式的运算符位于操作数之前 例如:(3 + 4) * 5 - 6对应的前缀表达式:- * + 3 4 5 6 中缀表达式(Infix expression) 中缀表达式就是常见的运算表达式,中
高精度算法
摘要:高精度加法 AcWing.791高精度加法 # include <iostream> # include <string> # include <vector> using namespace std; vector<int> add(vector<int>& A, vector<int>& B){
LeetCode常见错误
摘要:问题1: Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h) 数组越界,可能出现下标为-1或者是下标出现size()-1的情况了 vector 的size函数
二分搜索算法
摘要:二分搜索算法 常用的使用场景:寻找一个数,寻找左侧边界,寻找右侧边界 1.1 二分搜索模板 先介绍下二分搜索模板,后面的二分搜索都是基于这个二分搜索模板的 int binarySearch(vector<int>& nums, int target){ int left = 0, right = .
归并排序算法
摘要:归并排序 归并排序(merge sort) 是利用归并的思想实现的排序算法,该算法采用经典的分治(divide-and-conquer)策略。 分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的答案修补在一起,即分而治之。 算法思想 先把这个要
快速排序算法
摘要:题目链接:https://www.acwing.com/problem/content/description/787/ 吐槽:看了好几种快速排序的代码,要么是pivot为左边界AC不通过,要么就是边界情况没考虑清楚。属实恶心 下面写了3种AC通过的代码。(建议直接背下第二种或第三种) 先介绍下基本
C++STL——vector类
摘要:vector容器 1.1 vector容器的基本概念 Array 是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬往新空间,再释放原来的空间。Vector 是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容
C++STL—string类
摘要:string容器 1.1 string容器的基本概念 string容器是一个类 这个容器中有一个指针,指针维护了一个数组 string容器提供copy、find、insert、replace等等功能 使用string容器需要使用string头文件,即# include <string> 1.2 st
双指针技巧之快慢指针
摘要:双指针技巧分为两类:快慢指针和左右指针,前者主要解决链表中的问题,后者用来解决数组和字符串问题,下面将详细介绍快慢指针. 快慢指针的常用算法 快慢指针初始化时一般指向链表的头结点head,快指针fast在前,一次走两步,慢指针slow在后,一次走一步。 快慢指针典例1:判断链表中是否有环 我们很容易