题目:

给你一堆螺母和螺帽,每个螺母都有一个相对应的螺帽,但是他们之间的对应关系已经打乱。你可以比较螺母和螺帽的大小关系,但是你无法比较螺母和螺母的大小关系,你也无法比较螺帽和螺帽的大小关系。时间复杂度nlogn。

1.在nut数组拿一个,可以把bolt数组分为比那个小的,比那个大的,还有一个匹配的3个部分。

2.在bolt中小的那堆那一个可以把nut分成比那个小的,比那个大的,还有一个匹配的3个部分。

3.这样可以发现,现在数组产生两对比配的螺母和螺钉和一队小的螺钉和螺母,一队大的螺钉和螺母。

如图所示:

因为螺母螺钉的大小只能通过匹配方式比较,同类型之间不能比较大小。

/*** class Comparator {*     public:*      int cmp(string a, string b);* };* You can use compare.cmp(a, b) to compare nuts "a" and bolts "b",* if "a" is bigger than "b", it will return 1, else if they are equal,* it will return 0, else if "a" is smaller than "b", it will return -1.* When "a" is not a nut or "b" is not a bolt, it will return 2, which is not valid.
*/
class Solution {
public:/*** @param nuts: a vector of integers* @param bolts: a vector of integers* @param compare: a instance of Comparator* @return: nothing*/void sortNutsAndBolts(vector<string> &nuts, vector<string> &bolts, Comparator compare) {// write your code herequickSort(nuts, bolts, 0, nuts.size()-1, compare);}private:// Every where has Quick sort thinkingvoid quickSort(vector<string> &a, vector<string> &b, int l, int r, Comparator compare) {// 找出一个分裂点,分别分裂a和bint mark, count=0;for (int i=l; i<=r; ++i) { int t = compare.cmp(a[l], b[i]); // a's first compare with all b'sif (t==0) mark = i; // a第一个元素和b相等元素, 最终会找到b中的最右边的匹配else if (t==1) ++count; // a第一个元素大于b中的元素的个数}swap(a[l], a[l+count]); // a的左半部分分配count个元素swap(b[mark],b[l+count]);// b的左半部分分出来count个元素mark = l+count; // mark就是相同的匹配了,mark就是中轴int i = l, j = r;while (i<mark && j>mark) {while (i<mark && compare.cmp(a[i], b[mark])==-1) ++i; // 小于的while (j>mark && compare.cmp(a[j], b[mark])==1) --j; // 大于的if (i<j) swap(a[i++], a[j--]);} // a分成两部分i = l; j = r;while (i<mark && j>mark) {while (i<mark && compare.cmp(a[mark], b[i])==1) ++i;while (j>mark && compare.cmp(a[mark], b[j])==-1) --j;if (i<j) swap(b[i++], b[j--]);} // b分成两部分if (l<mark) quickSort(a, b, l, mark-1, compare);if (r>mark) quickSort(a, b, mark+1, r, compare);}
};

螺丝螺母匹配问题(快排的变形应用)相关推荐

  1. 碎碎念-----快排与工作

    每周在online judge 做道题是部门例行工作,我就跳过前面的赘述,直接goto正题. ........ 正题: 我又一次性没把把快排写对,改了几次才对,很郁闷,虽然我很久没写过算法,但是很久前 ...

  2. 【LeetCode笔记】215. 数组中的第K个最大元素(Java、快排、堆排、并发快排)

    文章目录 题目描述 思路 & 代码 快排 基于 Fork / Join 的并发快排 针对 topK 的快排优化 堆排 基本堆排 结合题目的堆排 二刷 题目描述 大名鼎鼎的TOP K,主要考察排 ...

  3. java查找网站在百度排名_百度网站快排系统 - 网站排名如何优化?

    原出处:超级排名系统 原文链接:http://www.chaojipaiming.com 百度网站快排系统注册地址 seo.chaojipaiming.com 网站关键词快速排名优化,7-15天关键词 ...

  4. 百度快排探究(一),Python selenium 实现自然搜索访问目标网站

    快排是现在比较火热的seo手段,快排即快速排名,相比传统的优化手段,尤其是企业站而言,快排能够快速占据排名,获取流量及客户,也是最热门的韭菜项目,可谓酸爽至极. 快排有没有用,据观察,应该是有用的,不 ...

  5. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  6. 快排之万能代理IP接口设计

    我们在<python脚本百度(SEO)快排–模拟点击最新核心源码>中提到对快排影响的重要因素之一就是IP,如何使用多IP执行快排脚本有两种方法: ** 1.使用动态拨号VPS ** ** ...

  7. 快排的优化(简直神乎其神了!!!)

    本文转载于:http://www.blogjava.net/killme2008/archive/2010/09/08/quicksort_optimized.html quicksort可以说是应用 ...

  8. 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

    文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...

  9. 螺母和螺帽问题的Java解法(快排O(nlogn))

    这个问题实际上就是先找一个螺母,用快排在螺钉里找到匹配的.同时找一个螺钉,在螺母里找一个相同的. 如此反复. public class a4 {static int n = 1,temp;static ...

最新文章

  1. 在C#中应用哈希表(Hashtable)
  2. MediaWiki 1.19.2 发布 - 开源 Wiki 系统
  3. python中cumsum_python numpy中cumsum的用法详解
  4. wsl2设置挂载_Windows下的Linux子系统安装,WSL 2下配置docker
  5. 库克退休前将再推出一个新品类?可能是AR眼镜
  6. 通过 PC 远程控制 Android 的应用 -- 可以将手机屏幕投射显示到电脑上
  7. python创建空文本文件_Python空白txt文件创建
  8. 10个超实用的小程序,你一定用得到!
  9. C语言中如何求三角形最大正弦值,余弦定理求三角形面积
  10. NLP中的全局注意力机制(Global Attention)
  11. PyTorch 轻松节省显存的小技巧
  12. 无法启用家庭计算机共享,无法启用共享访问,详细教您无法启用共享访问怎么解决...
  13. moses 编译_Ubuntu 8.10下moses测试平台搭建全记录
  14. linux基础-快速入门
  15. php修改头像接口,thinkphp修改头像
  16. 软件工程之PERT图 (AOA与AON)
  17. 百度竞价推广是什么?信息流推广以及网盟推广是什么?
  18. avr单片机c语言 右移,AVR左移右移递增减流水灯
  19. CloudDrive不能用了还有其他方法么
  20. pytorch pad 实例

热门文章

  1. ioa的app开发和android区别,ioA 7000
  2. cvi读写.csv文件
  3. 平均值、标准差、相关系数、回归线及最小二乘法
  4. 红杉官网已删长文:伴随SBF一路走来的救世主情结(上)
  5. 展会预告丨第五届数字中国建设成果展览会亮点前瞻:大象机器人展示高科技,带来新体验
  6. 探索原味 BFF 模式
  7. matlab中的measure,关于matlab中awgn函数中参数作用的测试
  8. android 悬浮球代码,Android 悬浮球
  9. 大公司为什么都有API网关?聊聊API网关的作用
  10. 感谢传智播客+C#.Net学习之旅