摘要: 首先明白逆序对的定义,逆序对就是数组中两个元素前大后小,我们就称这两个元素为一组逆序对。 接着看题目: 我们利用分治的思想,将区间一分为二,然后得到了逆序对的存在情况共三种: 1.两个元素都在左侧区间。 2.两个元素都在右侧区间。 3.两个元素一个在左,一个在右。 那么很明显我们分治的去解决这个问题 阅读全文
posted @ 2020-01-23 21:45 FLydoggie 阅读(899) 评论(0) 推荐(0)
摘要: 晚上回来写 #include<iostream> using namespace std; const int N = 1e6+10; int a[N],tmp[N]; void merge_sort(int a[],int L,int R){ if(L==R)return; int mid = L 阅读全文
posted @ 2020-01-15 15:27 FLydoggie 阅读(123) 评论(0) 推荐(0)
摘要: 快速选择算法本质上就是将快速排序算法进行优化,快速排序算法会递归左右区间来进行排序。而快速选择算法对左区间和右区间的数据个数与需要寻找的第K大的数字进行比较,然后选择了答案所存在的区间,舍弃了另一个不需要的区间,使算法复杂度降低到 O(n+ n/2 + n/4 +...+)也就是 O(n); 例题: 阅读全文
posted @ 2020-01-15 14:07 FLydoggie 阅读(1118) 评论(0) 推荐(0)
摘要: 快速排序(分治算法) const int n = 1e6 + 10; int a[N]; //a[]:待排序数组,L:排序数组的起始下标,R:排序数组的结束下标 void quick_sort(int a[],int L,int R){ if(l >= r){return;} //递归的终止条件 i 阅读全文
posted @ 2020-01-15 13:24 FLydoggie 阅读(98) 评论(0) 推荐(0)
摘要: 1.二维数组中的查找 题目描述 思路,本来想着暴力写一遍,但是暴力估计面试的时候直接被pass,所以思考了优化,首先能确定这个二维数组的规模是一个矩形,也就是每个一维的长度都相等的二维数组。然后尝试先确定答案的所在行,然后确定答案的所在列。但是这是个错误思路。错误的原因是因为题目只分别保证了横向递增 阅读全文
posted @ 2019-11-15 09:42 FLydoggie 阅读(247) 评论(0) 推荐(0)
摘要: 快要省赛了所以就开始补以前比赛的题目。不过由于水平限制只能补补签到题,算是监督自己吧,决定把这最后两个星期补的水题都写写题解吧。 C - Crusaders Quest C题理解了题意就是消除方块,求最大消除的三连块数量。因为只有9个方块,而且每种方块的数量都只有3个,所以其实第一反应是暴力,但是我 阅读全文
posted @ 2019-05-05 17:29 FLydoggie 阅读(313) 评论(0) 推荐(0)