一种类似快速排序的移动算法
2012-11-29 20:49
190 查看
1.问题描述:
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
2.解题思路:
从向量的两端开始移动,如果两端之和等于输入的整数,则找到解,如果两端之和小于输入的整数,移动低端指针,否则移动高端指针
例如 2 3 6 8 9 10 11 22 ,输入整数17,则输出 8 9
3.代码
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
2.解题思路:
从向量的两端开始移动,如果两端之和等于输入的整数,则找到解,如果两端之和小于输入的整数,移动低端指针,否则移动高端指针
例如 2 3 6 8 9 10 11 22 ,输入整数17,则输出 8 9
3.代码
/* This is a free Program, You can modify or redistribute it under the terms of GNU *Description:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和 *正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字, *输出任意一对即可。 *Language: C++ *Development Environment: VC6.0 *Author: Wangzhicheng *E-mail: 2363702560@qq.com *Date: 2012/11/29 */ #include <iostream> #include <vector> using namespace std; /* *从向量的两端开始移动,如果两端之和等于输入的整数,则找到解 *如果两端之和小于输入的整数,移动低端指针,否则移动高端指针 */ void Solution(vector<int>&v,int &num) { vector<int>::iterator start=v.begin(); vector<int>::iterator finish=v.end()-1; while(start!=finish) { if(*start+*finish==num) { cout<<*start<<"+"<<*finish<<"="<<num<<endl; return; } else if(*start+*finish<num) start++; else finish--; } } void main() { const int n=10; int i; int e; vector<int>v; for(i=0;i<n;i++) { cout<<"请输入第"<<i<<"个数:"; cin>>e; v.push_back(e); } int num; cout<<"请输入一个整数:"; cin>>num; Solution(v,num); }
相关文章推荐
- Unity 实现类似 QQ泡泡堂一样平滑行走的 基于Tile的移动算法
- 快速排序的一种优化算法(三向切分)
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- C++快速排序实现(quicksort) (算法导论)
- 一种凸多边形的交、并求解算法
- 一种结合混沌密码理论的彩色图象水印算法
- 十大算法系列之(一)——快速排序
- 由快速排序引申而来--如何学习算法
- 支持向量机的一种特征选取算法
- 关于一种求最大公约数的算法的分析与证明
- 一种简单而神奇的算法思路:分级组合(排列)法
- 算法——快速排序(Quicksort)
- 分治算法之快速排序
- C#之汉诺塔的移动步骤显示算法
- 算法学习记录-排序——快速排序
- 算法 排序算法之交换排序--冒泡排序和快速排序
- 常用算法Java实现之快速排序
- 算法分析之排序:交换排序之二——快速排序(QuickSort)
- 一种基于RSSI的实时定位算法的研究
- 一种新的基于Windows Mobile平台的移动开发N层架构(第七部分)