博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
荷兰国旗问题
阅读量:5941 次
发布时间:2019-06-19

本文共 1035 字,大约阅读时间需要 3 分钟。

题目描述:  

  给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)

 

解题思路:

  使用两个指针:p1,p2

  p1 = -1;  //左指针,在p1左边并含p1的所有数都<num

  p2 = N ; //右指针,p2=N在p2的右边含p2的所有数都大于num

  然后比较arr与num的值,并与相应的p1,p2的位置交换

 

代码实现:  

1 #include 
2 3 using namespace std; 4 5 6 void swap(int& a, int &b) 7 { 8 int temp; 9 temp = a;10 a = b;11 b = temp;12 }13 14 //记住,单次遍历n(n << N)次数组的时间复杂度 = n*O(N) == O(N)15 template
//目前我只想到了使用模板来实现引用数组,其他的引用方法都报错了。16 void Test(T& array , const int num)17 {18 int N, p1, p2;//两个指针19 p1 = -1;//左指针,在p1左边并含p1的所有数都
num)26 swap(array[--p2], array[i]);27 else28 ++i;29 30 }31 32 }33 34 void Heland()35 {36 int arr[] = { 1, 5,7,4,6,4,2,9 }; 37 Test(arr, 4);38 for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)39 cout << arr[i] << " ";40 cout << endl << "**************************" << endl;41 }

 

  

转载于:https://www.cnblogs.com/zzw1024/p/10987751.html

你可能感兴趣的文章
工作流引擎Oozie(一):workflow
查看>>
struct框架
查看>>
Deep Learning(深度学习)相关网站
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
Cross-compilation using Clang
查看>>
营销系统--手动补偿
查看>>
图标字体设计
查看>>
【转】Principles of training multi-layer neural network using backpropagation
查看>>
并查集hdu1232
查看>>
改动Androidproject的名称(非Eclipse重命名)
查看>>
tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空...
查看>>
dedecms后台左侧菜单500错误怎么处理
查看>>
Maven配置将war包部署到Tomcat(tomcat7-maven-plugin)
查看>>
Spring MVC学习-------------訪问到静态的文件
查看>>
Unity应用架构设计(11)——一个网络层的构建
查看>>
运行自己的shell脚本
查看>>
内存错误的类别
查看>>
Authentication 方案优化探索(JWT, Session, Refresh Token, etc.)
查看>>
Struts2 关于返回type="chain"的用法.
查看>>