文章分类 - 基础算法
摘要:十大排序 https://zhuanlan.zhihu.com/p/172524701 冒泡排序 解释: 相邻的两个值把最大的值放在右边,最小值放在左边,一次循环确定最后一个位置,逐层递进 代码//十大排序之冒泡排序 //升序 void bubble(vector<int>& ans) { if(a
阅读全文
摘要:# 代码 ```c++ class bingCJ { private: int father[MAXN]; public: //初始化所有的节点的父节点都是本身 void init(int n) { for(int i = 1; i <= n; i++) { father[i] = i; } } /
阅读全文
摘要:只有有向图才有的拓扑排序 代码 class Solution { public: //注意,邻接链表存储的是该节点可以到达的节点 //保存的是邻接链表 vector<vector<int>> graph; vector<int> toposort(vector<int>& nums, int num
阅读全文
摘要:# 算法介绍以及实现 https://zhuanlan.zhihu.com/p/151421571
阅读全文
摘要:一、首先是直接的插入排序: 这个过程是这样的: 首先是这个数组前面一段是排好序的数组,后面一段是无序待排数组。 然后第一层循环i是遍历每一个数组的元素,然后将这元素放进前面的有序数组,找出这个元素应该在哪个位置,这个位置记为j。 然后将这个元素j到i的元素全部往后面移动一位 最后将这个记录的元素fl
阅读全文
摘要:1、回溯算法就是一种不断探索可能性的方法,去循环 每一种可能得到的结果,把符合条件的结果保留下来,是一种bfs算法。 2、回溯算法的模板: void backtracking(参数) { if (终止条件) {//注意这里的条件是根据叶子节点的条件来写的 存放结果; return; } for (选
阅读全文
摘要:1、我们拿 斐波那契数来说,斐波那契数的定义为f(n)=f(n-1)+f(n-2)。我们有以下的方法进行计算,分别是暴力递归,记忆性递归,和动态规划 2、暴力递归方法(缺点是这个方法一定n比较大的时候容易造成时间复杂度很高): class solution { public: int fbnq(in
阅读全文
摘要:1、冒泡排序和选择排序的区别在于 (选择排序)一个是拿着第一个数和后面的所有位置数字去进行对比,从而确定该位置上面的那个数字是哪一个 (冒泡排序)一个是从第一个位置上开始往后面进行两个两个对比从而得到最大的一个数字,直到最后一个。 2、就像力扣里面说的 0 1 2 3 4 5(i=0) 3、代码实现
阅读全文
摘要:1、快速排序概念,快速排序是一种选择基准值来进行分区排序的算法,用到的是一种分而治之的思想(这个思想很重要) 2、我们一般是把一个数组第一个元素当作基准值来对比数的大小,分为上下两个数组,下的数组是一个比基准值小的数组,上的数组是一个比基准值大的数组,之后把基准值和上下两个数组合起来就ok,之后把上
阅读全文
摘要:1、递归的概念无需多说,这里的递归注意两个条件,没就是两个条件和一个调用栈的问题 2、写代码的时候特别注意递归的基线条件,这个条件比递归条件重要很多(因为傻子都知道递归条件的使用,但是基线条件需要理解),就拿下面的求阶层来说这个基线条件也是需要理解的。 3、首先是条件的问题,要形成递归一定要有两个条
阅读全文
摘要:1、选择排序就是一种将数据充分对比得到的排序,把第一个数据和后面的数据相比较,要是找到更小的,互换两者位置,然后进行下一位,直到运行完所有元素为止 2、代码实现比较多样化 这个是两个嵌套实现的方法: class Solution { public: void swap(int& a,int& b)
阅读全文
摘要:1、首先什么是二分算法肯定是清楚的,就像是我让你去猜一下我今天的工资,但是从0:100说,我会说大了小了,你肯定不会从1开始说道100,这个是简单查找,二分查找是每次都是以一半的数据划分,前提是输入的序列是一个有序的,这个很重要。 2、时间复杂度分析:对于包含n个元素的列表,用二分查找最多需要log
阅读全文

浙公网安备 33010602011771号