百度笔试题,求数组最大数,该数为数组中某两个数相加
来源:互联网 发布:显卡优化怎么设置 编辑:程序博客网 时间:2024/06/02 02:38
题目来源:http://bbs.csdn.net/topics/390885270
题目:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素。。。
首先,我们将数组从小到大进行快速排序,
1、将最后一个数设为最大数S;
2、用第一个数A和倒数第二个数B相加,如果结果比S大,说明B太大了,那么移动为倒数第三个数;如果比S小,说明A太小了,移动为第二个数。如果相等,直接返回A,B
3、直到AB的索引相遇还找不到结果与S一样的,将S变为倒数第二个数,再循环进行以上操作
代码如下:
#include <iostream>#include <algorithm>using namespace std;bool FindTwo(int nAry[], int nMaxCount, int& n1, int& n2){ for (int i = nMaxCount; i > 0; i--) { int nSumMax = nAry[i - 1]; int nBegin = 0; int nEnd = nMaxCount - 1; while (nBegin != nEnd) { int nTemp = nAry[nBegin] + nAry[nEnd]; if (nTemp == nSumMax) { n1 = nAry[nBegin]; n2 = nAry[nEnd]; return true; } else if (nTemp < nSumMax) { nBegin++; } else { nEnd--; } } } return false;}int main(){ const int MAX_COUNT = 10; int nAry[MAX_COUNT] = {8, 5, 7, 8, 8, 10, 7, 20, 11, 8}; // {5, 3, 4, 5, 3, 7, 8, 9, 6}; sort(nAry, nAry + MAX_COUNT); int n1 = 0; int n2 = 0; if (FindTwo(nAry, MAX_COUNT, n1, n2)) { cout << "sum: " << n1 + n2 << endl; cout << "factor: " << n1 << ends << n2 << endl; } else { cout << "not found" << endl; } return 0;}
另外,如果将步骤二使用二分法查找,那会快许多,只需要把代码中
nBegin++ 改为 nBegin = nBegin + __max(1, (nEnd - nBegin) / 2);
nEnd-- 改为 nEnd = nEnd - __max(1, (nEnd - nBegin) / 2);
就可以了。
0 0
- 百度笔试题,求数组最大数,该数为数组中某两个数相加
- 求数组最大数,该数为数组中某两个数相加
- 数组中求最大数
- ms 两个数组,从每个数组中取一个数相加,求最大的前k个和
- 167 Two Sum II (给定数组求相加为定值的两个数)
- 求从一个整数数组中两个数之和为m的两个数
- 求数组中第二最大数
- 找出数组中两个数之和为指定的数
- 面试100题:14.求在有序数组中查找两个数的和为指定数
- 面试100题:14.求在有序数组中查找两个数的和为指定数
- 【算法】求数组中某两个数的和为目标值
- 求数组排序后相邻两个数的最大差值
- 拼多多内推笔试一:求数组中任意三个数的最大乘积
- 给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
- 字典树的应用:求数组中异或最大的两个数
- 笔试面试之有序数组中查找和为定值的两个数
- 常见面试算法题:给定数组中寻找加和为特定数的两个数
- 选择数组中最大或者最小的两个数
- 第一个Windows窗体程序
- php获取汉字字符串长度
- Hive - 简介
- 直接获取类中(非static)成员函数地址的方法
- 平衡二叉树详解
- 百度笔试题,求数组最大数,该数为数组中某两个数相加
- jdbc+连接池
- 快速排序算法C++
- 创新资讯平台整理
- c语言基本编程复习
- 对sqlite的微型数据库的认知
- mySQL中replace的用法
- HTTP协议详解
- 三月里