算法总结
文章平均质量分 56
高冷小伙
加油加油
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
质数判断-多种优化
【1】直观判断 根据质数的定义,直接遍历2~n-1,看其中是否有n的因子。 bool is_prim1(int x){ for(int i=2;i<x;i++){ if(x%i==0)return 0; } return 1; } 【2】改进 对于一个数,假设有n=x*y;不难发现,x,y中必有一个数>=sqrt(n),另一个数<=sqrt(n);所以,我们其实只需要遍历2~sqrt(n),当其中不含n的因子时,那么n就是质数。 bool is_prim2(int x){原创 2021-12-14 21:48:11 · 894 阅读 · 0 评论 -
数据结构-堆
一、前言 堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。 1.1 堆的种类 最大堆、最小堆分别是父节点大于/小于子节点的堆。这个性质就是“堆属性”,且对于任何节点都成立。 1.2 优先队列与堆的关系 优先队列: 优先队列是一种数据结构,它的作用是找出、返回、删除优先队列中的优先级最小的元素。 堆: 堆,也是一种数据结构;其中的二叉堆经常用于实现优先队列;本文就是介绍二叉堆实现的优先队列。 1.3 堆(二叉堆)与二叉搜索树的区别 ’1.节点的原创 2021-09-27 20:39:04 · 194 阅读 · 0 评论 -
快速排序的实现&详解&笔试高频考察点&难点解析
快速排序的实现&详解&笔试高频考察点&难点解析 1.快速排序 1.1快排介绍 其他的排序方法,像归并排序、堆排序等平均时间复杂度虽然与快排一样,都是O(n*logn),但是上述几种排序算法都是依赖于它们之间的比较,统称为比较排序。 1.2快速排序的基本步骤 快排的原理很直白,就是分治法。实现步骤也很容易理解。 以数组任意元素为基数(一般为队首)temp,将数组中比temp大的元素移动到数组右侧,比temp小的元素移动到数组左侧。 对基数相应的左右数组排序 左数组:a原创 2021-08-19 17:41:35 · 350 阅读 · 0 评论 -
Leetcode-打家劫舍问题汇总-动态规划
https://leetcode-cn.com/problems/house-robber-iii/原创 2021-05-18 10:21:57 · 532 阅读 · 0 评论 -
二分答案总结-例题详解优化
前言 二分答案查找适用的数列是有序递增的数列; 基本思想 1.找出答案的范围区间; 2.用二分搜索的方式遍历区间,直至逼近答案; 注意事项 二分答案的思想很简单,但复杂的是对 边界条件的处理 下面以例题的形式解释: 【二分查找】[洛谷P1182-数列分段] 在 D 天内送达包裹的能力-二分答案 [P2678-跳石头]-详解优化 ...原创 2021-04-27 10:38:39 · 276 阅读 · 0 评论 -
动态规划之背包问题-详解优化
背包问题 背包问题多变灵活,下面介绍两种常见的背包问题:01背包和完全背包问题。在正式开始解释之前,我要引入一个非常重要的概念:多阶段动态规划问题。 多阶段动态规划问题 动态规划问题通常都具有时间或空间上的次序性,因此求解这类问题时,首先要将问题按一定的次序划分成若干相互联系的阶段。 01背包 所谓01背包就是指☞,一件物体只有两种状态:取或不取。 ##例题 给定 n 种物品和一个容量为 C 的背...原创 2021-04-11 13:57:15 · 280 阅读 · 0 评论 -
最长公共子序列(LCS)详解优化
问题 解决思路 扩展原创 2021-03-20 20:58:28 · 1293 阅读 · 0 评论 -
【蓝桥杯】第十届省赛A组题解
B.数列求值 题目内容 解题思路 1.题目难度不大,就是简单的斐波那契数列; 2.但是在遍历过程中,因为项数太多,无法完全存储;所以我们应该%10000,这样可以节约空间; 代码展示 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5; /* 4659 */ int main(){ // int n; // cin>>n; // int a=1,b=1,c=1;原创 2021-03-31 21:57:01 · 492 阅读 · 0 评论 -
全排列详解优化(去重+字典序)
全排列 一般的情况都是给出n个数,求出其不同顺序的排列方式; 全排列的实现 1.字典序法 根据全排列的公式,f(n)=n!不难推断出可以用DFS来求其所有不同的排列顺序;这种方法得出的顺序符号字典序排列。 这是它的生成树 代码实现 void DFS(int x){ if(x>=n){ for(int i=0;i<n;i++){ cout<<" "<<num[i]; } cout<<endl; return; } for(原创 2021-03-18 14:56:26 · 1897 阅读 · 0 评论 -
最长递增子序列(LIS)时间复杂度详解
问题描述 所谓最长递增子序列,就是从一个数组中,从左至右选择若干个数,使得组成的新序列长度最长。 解题思路 1.转换成最长公共子序列问题 2.普通动态规划(时间复杂度O(n^2)) 3.优化动态规划(时间复杂度O(n log n) ...原创 2021-03-08 20:01:55 · 3155 阅读 · 0 评论 -
Dijkstra算法详解优化
介绍 Dijkstra算法是用来解决最短路径问题的一个常用算法;常用于解决单源最短路径问题,即给定一个起点S,求出其到图各个顶点的最小距离。其本质思想是贪心思想。 解释 图文解释 https://blog.youkuaiyun.com/lbperfect123/article/details/84281300 文字解释 先建立数组: vector<node>G[100005];//实现图(邻接表实现) int dis[100005];//记录起点s到j的最短距离 bool visted[100005];原创 2020-12-24 15:59:20 · 1324 阅读 · 0 评论 -
【数据结构】树
引言 一直没有系统的学习“树”这一数据结构,导致对一些概念,用法模棱两可,所以现在开始系统的学习一下; 知识点总结 树 树的定义 有若干条节点和若干条边组成的数据结构; 树是一种非线性的数据结构,我们可以类比想像生活中的树,有树枝,树枝分叉处,树叶等; 为什么要使用树 我们来考虑一个问题,有一段线路(长度为n)出现了故障,我们要判断问题出现在那部分,一般方法就是通过一节节的测试,但是这样的话平均需要测n/2次,当n非常大时,复杂度是不能接受的;因此,需要一个更为巧妙的办法==》二分查找; 这样的话,查找原创 2020-09-22 09:23:37 · 422 阅读 · 0 评论 -
【图着色问题】详解优化
图着色问题 【1】 给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。 【2】 若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。 解题思路 【1】 问题分析 第一种是常见的给出一张图,和固定的颜色,让我们判断是否能成功染色或者有几种染色方案; 解题思路 回溯+DFS 用dfs(i)表示对第i个节点染色,当i>n时,即染色完毕; 对于每一个节点,都要去枚举与它相连的所有节点,原创 2020-08-05 19:33:56 · 4186 阅读 · 0 评论 -
【尺取法】详解优化
尺取法 定义 顾名思义,尺取法就是想尺子一样,一次取出一段区间;尺取法的通常用法都是选取两个左右下标(L,R);然后根据实际情况更改左右下标。 例题详解 题意:给定一个序列N,找出最短的子序列长度,使得其和大于或等于m。 输入: ------------------- N = 10,m = 15 5 1 3 5 10 7 4 9 2 8 ============================ 输出 ------------------- 2 思路:一开始根据条件确定区间的左右下标,然后根据题目的条件更改原创 2020-07-15 19:05:48 · 311 阅读 · 0 评论
分享