算法
文章平均质量分 60
自用
Alkaid:
这个作者很懒,什么都没留下…
展开
-
并查集+路径压缩模板
并查集视频讲解文字讲解并查集进阶版可以看看下面这个并查集(进阶)无路径压缩要用到的函数int initialize(int parent[]){//初始化数组,让每个点都指向自己 int i; for(i=0;i<N;i++){ parent[i]原创 2021-03-10 21:37:37 · 132 阅读 · 0 评论 -
【C++】1088:滑雪(动规/递推)
//先设每个区域的最长长度为 1;//先对二维数组【此区域】进行排序 ,因为要用到排序,结构体比较方便//从找最低点的最长滑雪长度开始,在周围找比它更低的点//而相对高的点的最长滑雪长度是由相对低点的最长滑雪长度组成//最后每个区域都更新了他们的最长滑雪长度,找出最大值就可以啦...原创 2021-02-28 17:35:53 · 1272 阅读 · 3 评论 -
【Java】插入排序
就像打扑克时理牌一样对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)...原创 2021-02-23 10:49:03 · 83 阅读 · 1 评论 -
动态规划算法入门(题目特点)
Coin Change题目描述:You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of原创 2021-02-21 15:40:19 · 478 阅读 · 0 评论 -
【C++】数字三角形(动态规划/递归/递推)
Description下图中给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。 注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。Input输入有多组测试数据,输入以EOF为结束,对于每一组测试数据,输入的第一行是一个整数N (1 < N <= 100),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间原创 2021-02-01 11:03:57 · 7228 阅读 · 4 评论 -
【Java】八皇后问题(递归回溯/深搜)
回溯法回溯法,又被称为“试探法”。解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择。这种走不通就回退再走的方法就是回溯法。回溯VS递归很多人认为回溯和递归是一样的,其实不然。在回溯法中可以看到有递归的身影,但是两者是有区别的。回溯法从问题本身出发,寻找可能实现的所有情况。和穷举法的思想相近,不同在于穷举法是将所有的情况都列举出来以后再一一筛选,而回溯法在列举过程如果发现当前情况根本不可能存在,就停止后续的所有工作,返回上原创 2020-10-24 16:15:19 · 529 阅读 · 0 评论 -
【C++】N皇后问题(递归)
问题描述n皇后问题:输入整数n,要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。更详细的写在这里【Java】八皇后问题(递归回溯/深搜)代码实现#include<iostream>#include<cmath>using namespace std;int n;int queenPos[100];void Nqueen(int k);int main(){ cin>>n; Nqueen(0); return 0;}原创 2021-01-30 12:09:07 · 2370 阅读 · 3 评论 -
【C++】归并排序-分治(图解+例题)
思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有原创 2021-01-29 14:48:04 · 592 阅读 · 0 评论 -
【C++】max_element(最长不降子序列)
最近在学习使用c++,看程序算法的时候遇到的题用到了max_element,先记录一下,后面再来深入学习min_element 和 max_element头文件:#include< algorithm>作用:返回容器中最小值和最大值的指针。max_element(first,end);参数:param begin : 序列起始地址(迭代器)param end : 序列结束地址(迭代器)return : 序列中最大/小元素地址(迭代器)最长不降子序列Description原创 2021-01-26 11:46:29 · 475 阅读 · 0 评论 -
【Java】快速排序
①随机选择一个元素作为基准元素Pivot.这样一来,即使在数列完全逆序的情况下,也可以有效地将数列分成两部分。②把其他元素当中小于基准元素的都移动到基准元素一边,大于基准元素的都移动到基准元素另一边。选定pivot,low,highhigh比pivot大,low比pivot小,继续比较下一个high比pivot小,low比pivot大,交换位置继续比较8>0,交换位置high<low,结束查找这样就把一个数组分成两组,再次执行上述步骤进行排序public cl原创 2020-07-11 14:08:39 · 314 阅读 · 0 评论 -
【Java】冒泡排序
相邻两个数进行比较public class Maopao { public static void main(String[] args) { int[] arr = new int[] {43,72,94,-15,-6,99,1,6}; for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int t = arr原创 2020-07-10 12:00:01 · 259 阅读 · 0 评论 -
【Java】二分法查找
前提:所要查找的数组必须有序。 int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333}; int dest1 = -34; dest1 = 35; int head = 0;//初始的首索引 int end = arr2.length - 1;//初始的末索引 boolean isFlag1 = true; while(head <= end){ int middle = (head + end原创 2020-07-10 11:55:25 · 111 阅读 · 0 评论