算法总结
文章平均质量分 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 · 683 阅读 · 0 评论 -
数据结构-堆
一、前言堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。1.1 堆的种类最大堆、最小堆分别是父节点大于/小于子节点的堆。这个性质就是“堆属性”,且对于任何节点都成立。1.2 优先队列与堆的关系优先队列: 优先队列是一种数据结构,它的作用是找出、返回、删除优先队列中的优先级最小的元素。堆: 堆,也是一种数据结构;其中的二叉堆经常用于实现优先队列;本文就是介绍二叉堆实现的优先队列。1.3 堆(二叉堆)与二叉搜索树的区别’1.节点的原创 2021-09-27 20:39:04 · 95 阅读 · 0 评论 -
快速排序的实现&详解&笔试高频考察点&难点解析
快速排序的实现&详解&笔试高频考察点&难点解析1.快速排序1.1快排介绍 其他的排序方法,像归并排序、堆排序等平均时间复杂度虽然与快排一样,都是O(n*logn),但是上述几种排序算法都是依赖于它们之间的比较,统称为比较排序。1.2快速排序的基本步骤快排的原理很直白,就是分治法。实现步骤也很容易理解。以数组任意元素为基数(一般为队首)temp,将数组中比temp大的元素移动到数组右侧,比temp小的元素移动到数组左侧。对基数相应的左右数组排序 左数组:a原创 2021-08-19 17:41:35 · 238 阅读 · 0 评论 -
Leetcode-打家劫舍问题汇总-动态规划
https://leetcode-cn.com/problems/house-robber-iii/原创 2021-05-18 10:21:57 · 420 阅读 · 0 评论 -
二分答案总结-例题详解优化
前言二分答案查找适用的数列是有序递增的数列;基本思想1.找出答案的范围区间;2.用二分搜索的方式遍历区间,直至逼近答案;注意事项二分答案的思想很简单,但复杂的是对 边界条件的处理下面以例题的形式解释:【二分查找】[洛谷P1182-数列分段]在 D 天内送达包裹的能力-二分答案[P2678-跳石头]-详解优化...原创 2021-04-27 10:38:39 · 175 阅读 · 0 评论 -
动态规划之背包问题-详解优化
背包问题背包问题多变灵活,下面介绍两种常见的背包问题:01背包和完全背包问题。在正式开始解释之前,我要引入一个非常重要的概念:多阶段动态规划问题。多阶段动态规划问题动态规划问题通常都具有时间或空间上的次序性,因此求解这类问题时,首先要将问题按一定的次序划分成若干相互联系的阶段。01背包所谓01背包就是指☞,一件物体只有两种状态:取或不取。##例题给定 n 种物品和一个容量为 C 的背...原创 2021-04-11 13:57:15 · 169 阅读 · 0 评论 -
最长公共子序列(LCS)详解优化
问题解决思路扩展原创 2021-03-20 20:58:28 · 1102 阅读 · 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 · 392 阅读 · 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 · 1331 阅读 · 0 评论 -
最长递增子序列(LIS)时间复杂度详解
问题描述所谓最长递增子序列,就是从一个数组中,从左至右选择若干个数,使得组成的新序列长度最长。解题思路1.转换成最长公共子序列问题2.普通动态规划(时间复杂度O(n^2))3.优化动态规划(时间复杂度O(n log n)...原创 2021-03-08 20:01:55 · 2584 阅读 · 0 评论 -
Dijkstra算法详解优化
介绍Dijkstra算法是用来解决最短路径问题的一个常用算法;常用于解决单源最短路径问题,即给定一个起点S,求出其到图各个顶点的最小距离。其本质思想是贪心思想。解释图文解释https://blog.csdn.net/lbperfect123/article/details/84281300文字解释先建立数组:vector<node>G[100005];//实现图(邻接表实现)int dis[100005];//记录起点s到j的最短距离bool visted[100005];原创 2020-12-24 15:59:20 · 1230 阅读 · 0 评论 -
【数据结构】树
引言一直没有系统的学习“树”这一数据结构,导致对一些概念,用法模棱两可,所以现在开始系统的学习一下;知识点总结树树的定义有若干条节点和若干条边组成的数据结构;树是一种非线性的数据结构,我们可以类比想像生活中的树,有树枝,树枝分叉处,树叶等;为什么要使用树我们来考虑一个问题,有一段线路(长度为n)出现了故障,我们要判断问题出现在那部分,一般方法就是通过一节节的测试,但是这样的话平均需要测n/2次,当n非常大时,复杂度是不能接受的;因此,需要一个更为巧妙的办法==》二分查找;这样的话,查找原创 2020-09-22 09:23:37 · 307 阅读 · 0 评论 -
【图着色问题】详解优化
图着色问题【1】给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。【2】若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。解题思路【1】问题分析第一种是常见的给出一张图,和固定的颜色,让我们判断是否能成功染色或者有几种染色方案;解题思路回溯+DFS用dfs(i)表示对第i个节点染色,当i>n时,即染色完毕;对于每一个节点,都要去枚举与它相连的所有节点,原创 2020-08-05 19:33:56 · 3842 阅读 · 0 评论 -
【尺取法】详解优化
尺取法定义顾名思义,尺取法就是想尺子一样,一次取出一段区间;尺取法的通常用法都是选取两个左右下标(L,R);然后根据实际情况更改左右下标。例题详解题意:给定一个序列N,找出最短的子序列长度,使得其和大于或等于m。输入:-------------------N = 10,m = 155 1 3 5 10 7 4 9 2 8============================输出-------------------2思路:一开始根据条件确定区间的左右下标,然后根据题目的条件更改原创 2020-07-15 19:05:48 · 203 阅读 · 0 评论