• 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));
        }
    }
     
  • 相关阅读:
    关于直播的技术整理2
    关于直播的技术整理
    android drawable size
    Could not find gradle wrapper within android sdk
    基于开源Red5搭建的视频直播平台
    Cannot find module 'rxjs/operators/share'
    Cannot find type definition file for '.svn'
    Ionic国际化解决方案
    本博客停止更新改用wordperss
    Powershell批量安装SNMP服务
  • 原文地址:https://www.cnblogs.com/l199616j/p/10311858.html
Copyright © 2020-2023  润新知