随笔分类 -  排序算法

摘要:题意:给定一个长度为N的数组,全部由{1,2, 3}组成,求将其排列成不降序列的最少移动次数分析:求出每个1,2,3 各自 是数量,count[1],count[2],count[3]; 这样也就知道了排列后各个元素所属的区域;接下来,我们先需要考虑1 和2 俩块区域;交换一次,能够回到自己所属的区域,应该就是最好的交换了,这样我们就优先考虑交换之后俩俩可以回到自己位置的交换for (int i=1;i<=count[1]+count[2];i++){ if (t[i]==3) a[3]++; else if (t[i]==2&&i<=count[1]) a[1]+ 阅读全文
posted @ 2011-10-23 02:31 枕边梦 阅读(204) 评论(0) 推荐(0)
摘要:题目大意:在二维平面上,给一些点。有两个操作:给一个d,把所有x为d的点去掉,或把所有y为d的点去掉,问每次去掉的点。我的思路:先将横纵坐标都离散化(大部分时间都花在这个上面吧),然后直接把出现过的点(离散过的点)累计,每次询问之后就可以直接输出了,之后再维护一下,把对应的x或y的累计值 减1==! 很浅显的思路我的代码:600+msView Code #include<iostream>#include<map>using namespace std;map<int,int> mapx;map<int,int> mapy;map<int, 阅读全文
posted @ 2011-09-11 03:01 枕边梦 阅读(358) 评论(0) 推荐(0)
摘要:原文链接为http://hxraid.iteye.com/blog/647759从《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到 logN。而是利用对待排数据的某些限定性假设 ,来避免绝大多数的“比较”操作。桶排序就是这样的原理。桶排序的基本思想 假设有一组长度为N的待排关键字序列K[1....n]。首先将这个序列划分成M个的子区间(桶) 。然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) ,那么该关键字... 阅读全文
posted @ 2011-09-06 22:36 枕边梦 阅读(404) 评论(0) 推荐(0)