求数组最大数,该数为数组中某两个数相加
题目:
百度笔试:在一个正整数集合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()的用法总结
转载于:https://www.cnblogs.com/engineerLF/p/5393129.html
求数组最大数,该数为数组中某两个数相加相关推荐
- ms 两个数组,从每个数组中取一个数相加,求最大的前k个和
两个数组,从每个数组中取一个数相加,求最大的前k个和 比如: 数组A:1,2,3 数组B:4,5,6 则最大的前2个和:9,8. ps:结果放到数组C[k]中 http://www.cnbl ...
- 在O(N)时间内求解 正数数组中 两个数相加的 最大值
一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相加的最大值,其中被加数的下标大于加数的下标.由加法运算的可逆性,j >i 这个条件可以去掉. 即求出: max ...
- C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
1. 题目 请编写一个函数function,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回.主函数中x是数组名,n 是x中的数据个数,max存放最大值,i ...
- 【100题】第十四题(数组中找两个数使其和等于输入数)
一,题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组1. ...
- 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
第 14 题(数组): 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字. 要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意 ...
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
原文转自:http://blog.csdn.net/u013322907/article/details/38300711 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们 ...
- 数组两个整数相加 c语言,作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)...
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- JAVA实现输入一个整数,输出该数二进制表示中1的个数(《剑指offer》)
题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 这个题目有个比较有意思并且被公认的解法,我就先贴答案吧: public class Solution {public int ...
- 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
转自http://my.oschina.net/ithaibo/blog/142655 题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目引自http://ac.jobdu ...
最新文章
- CSS3绘制圆角矩形的简单示例
- 直播这把“火”,还能烧多久?
- 分子生物学-氨基酸电中性与肽键
- ESD二极管 DW3.3-2PLC-S 封装SO-8 电压3.3V
- ci框架 反向代理配置_《网站建设》Nginx配置反向代理
- 哈佛大学计算机生物科学,生命科学专业
- java并发AtomicIntegerFieldUpdater
- Java开发知识之Java的异常处理
- 栈的应用 - 就近匹配
- SpringBoot + Kafka + ELK 完成海量日志收集(超详细)
- UPDATE INNER JOIN 两表联合更新
- Thinkphp学习笔记——友情链接的添加和验证
- 20行代码简单python爬虫,爬虫实例
- 银行对公业务的发展方向,及多银行资金管理云服务的探索
- 2022城市辅助驾驶赛道陷入“三国争霸”,数据智能助力毫末智行杀出重围?
- 【爬虫】使用request模块进行爬虫
- 屏蔽 macOS 系统更新提示及清除更新标记
- Sql Hacks 阅读感悟——数值处理
- 远程抄表 服务器,远程抄表系统的数据服务器软件设计
- python之Numpy随机抽样