求数组最大数,该数为数组中某两个数相加
来源:互联网 发布:pp助手mac官方下载 编辑:程序博客网 时间:2024/06/03 17:34
题目:
百度笔试:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素。
思想:
首先,我们将数组从小到大进行快速排序。其次: 1、将最后一个数设为最大数设定为S; 2、用第一个数A和倒数第二个数B相加,如果结果比S大,说明B太大了,那么移动B为倒数第三个数;如果比S小,说明A太小了,移动为A第二个数。如果相等,直接返回A,B; 3、直到AB的索引相遇还找不到结果与S一样的,将S变为倒数第二个数,则跳转至1操作。
代码:
#include"iostream"#include <algorithm>using namespace std;void FindNumber(int intArray[],int length,int &Max,int &n1,int &n2){for(;length>2;length--){int tagert=intArray[length-1];//目标S,设定为最大的数int front=0,end=length-2; int temp=0;while(front!=end){temp=intArray[front]+intArray[end];//A=intArray[front],B=intArray[end];if(temp<intArray[length-1])front++;else if(temp>intArray[length-1])end--;else {Max=intArray[length-1];n1=intArray[front];n2=intArray[end];return;}}}}int _tmain(int argc, _TCHAR* argv[]){int intArray[10]={8, 5, 7, 4, 3, 10, 7, 29, 54, 16};int max=0,n1=0,n2=0;sort(intArray,intArray+10);FindNumber(intArray,10,max,n1,n2);if(max)//max非0表示完成搜索cout<<max<<"="<<n1<<"+"<<n2<<endl;elsecout<<"集合中满足条件的最大数不存在"<<endl;return 0;}
附加:#include <algorithm>中 sort()的使用
void sort( iterator start, iterator end ); void sort( iterator start, iterator end, StrictWeakOrdering cmp );
可以用来实现vector,string或者数组的排序。这里需要#include"functional",functional提供了一堆基于模板的比较函数对象:equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。使用例子如下:
bool cmp(int a,int b){return a>b;}//降序排列,如果改为return a<b,则为升序sort(intArray,intArray+10);//升序sort(intArray,intArray+10,greater<int>());//升序sort(intArray,intArray+10,cmp);//降序sort(intArray,intArray+10,less<int>());//降序vector<int> intVector(10,12);sort(intVector.begin(),intVector.end());//升序sort(intVector.begin(),intVector.end(),greater<int>());//升序sort(intVector.begin(),intVector.end(),cmp);//降序sort(intVector.begin(),intVector.end(),less<int>());//降序string s("ABCDEFG");sort(s.begin(),s.end());//升序sort(s.begin(),s.end(),greater<char>());//升序sort(s.rbegin(),s.rend());//反向迭代器完成,降序sort(s.begin(),s.end(),less<char>());//降序
部分参考自:百度笔试题,求数组最大数,该数为数组中某两个数相加
c++中sort()及qsort()的用法总结
0 0
- 百度笔试题,求数组最大数,该数为数组中某两个数相加
- 求数组最大数,该数为数组中某两个数相加
- 数组中求最大数
- ms 两个数组,从每个数组中取一个数相加,求最大的前k个和
- 167 Two Sum II (给定数组求相加为定值的两个数)
- 求从一个整数数组中两个数之和为m的两个数
- 求数组中第二最大数
- 找出数组中两个数之和为指定的数
- 【算法】求数组中某两个数的和为目标值
- 求数组排序后相邻两个数的最大差值
- 给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
- 字典树的应用:求数组中异或最大的两个数
- 面试100题:14.求在有序数组中查找两个数的和为指定数
- 面试100题:14.求在有序数组中查找两个数的和为指定数
- 选择数组中最大或者最小的两个数
- 在一个数组中找到最大的两个数
- 从数组中找出最大的前两个数
- 14. 求升序的数组中两个数的和为N
- 别在本应吃苦的年纪选择了安逸
- android ndk环境配置
- SQL Server 2005将某些数据库行为设置为与指定的 SQL Server 版本兼容
- 数据库设计要遵循的范式
- C++知识学习--虚函数介绍和使用
- 求数组最大数,该数为数组中某两个数相加
- Unity3D中文视频教程【超清+精选】
- MySQL安装失败或者重装后安装失败解决方法
- 《大话数据结构》读书笔记之 队列抽象数据类型(数组实现循环队列)
- js中常用的浏览器对象
- HDOJ 5007 Post Robot--2014网络赛西安赛区A题
- 百度定位与百度天气预报接口的使用
- db2 隔离级别
- 苹果新的编程语言 Swift 语言进阶(六)--函数和闭包