zoukankan      html  css  js  c++  java
  • 求数组最大数,该数为数组中某两个数相加

    题目:

        百度笔试:在一个正整数集合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;
    	else
    		cout<<"集合中满足条件的最大数不存在"<<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()的用法总结

  • 相关阅读:
    requireJS搭建
    html启动本地.exe文件
    自定义input[type="checkbox"]的样式
    使用rem单位时css sprites的坑
    visibility API
    css动画
    去除ios端输入框的弹出
    *java类的生命周期
    处理高并发,防止库存超卖
    java注解的使用
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393129.html
Copyright © 2011-2022 走看看