zoukankan      html  css  js  c++  java
  • 2018 拼多多 校招真题 最大乘积

    最大乘积
     
    时间限制:1秒 空间限制:32768K 热度指数:8197
    校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

    题目描述

    给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

    输入描述:

    无序整数数组A[n]

    输出描述:

    满足条件的最大乘积
    示例1

    输入


    3 
    4 1 2

    输出

    8


    思路分析:

    看到这个题目,下意识想到用Arrays.sort()排一下序,

    因为输入的整数可以是负数,所以只需要用Math.max()判断一下,

    最大的三个数的乘积 与 最小两个数与最大那个数的乘积 哪个数大,输出哪个就行啦,

    例如:5,3,2,-8,-9;
    5*3*2=30 < 5*(-8)*(-9)=360

    but Arrays.sort()的思路是归并排序,时间复杂度是O(n*log(n)),不符合题目要求
    所以,额,,,我就用了最最笨的方法哈哈:

    我用三个变量存前三大的整数,用两个变量存最小的两个数;

    一边接收输入的值,一边判断,时间复杂度为O(n),空间复杂度为O(1);

    最后输出 最大的那三个数的乘积大与最小的那两个数与最大的数的乘积中较大的数就ok啦。

    Java 代码如下:
    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sca = new Scanner(System.in);
            int n = 0;
            int m = sca.nextInt();
            int max=Integer.MIN_VALUE,max1=Integer.MIN_VALUE,max2=Integer.MIN_VALUE,min=Integer.MAX_VALUE,min1 = Integer.MAX_VALUE;
            for(int i = 0;i<m;i++){
                n = sca.nextInt();
               if(max>n){
                       max2 = Math.max(Math.min(max1,n),max2);
                    max1 = Math.max(max1,n);
               }else{
                    max2 = max1;
                    max1 = max;
                    max = n;
                }
                if(min<n)
                    min1 = Math.min(min1,n);
                else{
                    min1 = min;
                    min = n;
                }
            }
            long a = (long)max*max1*max2;
            long b = (long)max*min*min1;
            System.out.println(Math.max(a,b));
        }
    }
     
  • 相关阅读:
    Flex的 Event中属性currentTarget与target的差别
    考研复试机试题(2010)
    Android应用性能优化之使用SparseArray替代HashMap
    机房收费重构版总结
    中英文对照 —— 缩略词
    NLP(paper + code)
    NLP(paper + code)
    优化与凸优化初始
    优化与凸优化初始
    工具类与工具函数 —— 素数相关
  • 原文地址:https://www.cnblogs.com/l199616j/p/10311858.html
Copyright © 2011-2022 走看看