三个数的乘最大

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;


// long 类型 

long long  fun(vector<long long> &arr){
    long long  res = 1;
	long long  maxNums[3] = {0, 0, 0};  // 三个最大的正数  并按照大小顺序依次排列
	long long minNums[2] = {0, 0};  // 两个最小的负数  同上
    int len = arr.size();
    int i, j, k;
    if(arr.size()==3){
        return arr[0]*arr[1]*arr[2];
    }

    for(i = 0; i < len; i++){
        if(arr[i] < 0){
            for(j = 1; j >=0; --j){
                // 当前项和 minNums 第一项开始比较
                // 如果 arr 小 则 插入到 minNums 当前项同时把最后一项删除
                if(minNums[j] > arr[i]){
					minNums[j]=arr[i];
                    sort(minNums,minNums+2);
                    break;
                }
            }
        }else {
            for(k = 0; k <= 2; ++k){
                if(maxNums[k] < arr[i]){
                    //maxNums.splice(k + 1, 0, arr[i]);
                    //maxNums.shift();
					maxNums[k] = arr[i];
					sort(maxNums,maxNums+3);
                    break;
                }
            }
        }
    }
	
       if(maxNums[0] * maxNums[1] > minNums[0] * minNums[1]){
          res = maxNums[0]*maxNums[1]*maxNums[2];
       }else {
          res = maxNums[2]*minNums[0]*minNums[1];
       }
    return res;
}


int main(){

	int n;
	while(cin>>n){
		vector<long long> ivec(n);
		for(int i=0;i<n;++i){
			cin>>ivec[i];
		}
       
        if(n<3){
            continue;
        }
        int len=ivec.size();

		cout<<fun(ivec)<<endl;
        

	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u010325193/article/details/86517669