![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题目及解题思路
将学过的知识点进行收藏,以备复习和刷题参考
三层楼
这个作者很懒,什么都没留下…
展开
-
排序算法详细总结
冒泡排序1、冒泡排序1.1算法思想1.2代码2、选择排序2.1算法思想2.2代码3、插入排序3.1算法思想3.2代码3.3补充4、快速排序4.1算法思想4.2代码4.3补充5、归并排序5.1算法思想5.2代码5.3补充6、堆排序6.1算法思想6.2代码6.3补充 1、冒泡排序 1.1算法思想 冒泡排序算法每次比较相邻的两个数,如果左边的数小于右边的数,那么交换这两个元素,否则不交换,经过第一趟交换后,最大的元素肯定在最右边的位置上,然后对前n−1个元素重复上述操作。 1.2代码 public stati.原创 2021-04-23 13:34:39 · 82 阅读 · 0 评论 -
逆序对的数量
题目描述 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 输出一个整数,表示逆序对的个数。 数据范围 1≤n≤1000001≤n≤100000 输入样例: 6 2 3 4 5 6 1 输出样例: 5 #include <iostream> us原创 2021-01-27 19:16:35 · 100 阅读 · 0 评论 -
第k个数
题目描述 给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少。 输入格式 第一行包含两个整数 n 和 k。 第二行包含 n 个整数(所有整数均在1~109109范围内),表示整数数列。 输出格式 输出一个整数,表示数列的第k小数。 数据范围 1≤n≤1000001≤n≤100000 1≤k≤n1≤k≤n 输入样例: 5 3 2 4 1 5 3 输出样例: 3 #include <iostream> using namespace std; const in原创 2021-01-27 18:24:40 · 102 阅读 · 0 评论 -
一维前缀和与二维前缀和(子矩阵的和)
一维前缀和 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数,表示整数数列。 接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。 输出格式 共m行,每行输出一个询问的结果。 数据范围 1≤l≤r≤n, 1≤n,m≤100000, −1000≤数列中元素的值≤1000 输入样例: 5 3 2 1 3 6 4 1 2 1 3 2 4 输出样例: 3 6 10 #原创 2021-01-27 17:06:53 · 84 阅读 · 0 评论 -
二分查找——数的范围
题目描述 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“-1 -1”。 输入格式 第一行包含整数n和q,表示数组长度和询问个数。 第二行包含n个整数(均在1~1000010000范围内),表示完整数组。 接下来q行,每行包含一个整数k,表示一个询问元素。 输出格式 共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。 如果数组中不存在该元素,则返回“-1 -1”。 数据范围 1≤n原创 2021-01-25 20:47:51 · 187 阅读 · 0 评论 -
归并排序
题目描述 给定你一个长度为n的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数(所有整数均在1~109109范围内),表示整个数列。 输出格式 输出共一行,包含 n 个整数,表示排好序的数列。 数据范围 1≤n≤1000001≤n≤100000 输入样例: 5 3 1 2 4 5 输出样例: 1 2 3 4 5 归并排序步骤:1、确定分界点下表mid = (l+r)/2 2、递归排序左边和右边 3、原创 2021-01-25 19:55:22 · 64 阅读 · 0 评论 -
快速排序
算法思想-分治 代码模版 下面展示一些 内联代码片。 #include <iostream> using namespace std; const int N = 1000010; int q[N]; void quick_sort(int q[], int l, int r) { if (l >= r) return;//检测左右边界是否正常 int i = l - 1, j = r + 1, x = q[l + r >> 1]; //由于使原创 2021-01-25 19:07:22 · 66 阅读 · 0 评论