拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积

2024-06-06 21:48

本文主要是介绍拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

给出一个可能包含正数、零、负数的无序整数序列,从该序列中任选三个数计算乘积,求最大的乘积是多少?

要求:算法的时间复杂度为O(n),空间复杂度为O(1).

输入:

第一行输入n表示序列中整数的个数

第二行输入n个整数

输出;

最大的乘积

例如:

输入:

4

1 0 -2 -4

输出:

8


import java.time.temporal.ValueRange;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] array = new int[n];for (int i = 0; i < array.length; i++) {array[i] = scanner.nextInt();}int tem;//用array[0],array[1],array[2] 表示前三个最大的数//先对array[0],array[1],array[2]由大到小进行排序if(array[1]>array[0]){tem = array[1];array[1] = array[0];array[0] = tem;}if(array[2]>array[0]){tem = array[2];array[2] = array[1];array[1] = array[0];array[0] = tem;}else {if(array[2]>array[1]){tem = array[1];array[1] = array[2];array[2] = tem;}}for(int i = 3;i<array.length;i++){//更新最大的三个数if(array[i]>array[0]){//交换这两个数tem =  array[0];array[0] = array[i];array[i] = tem;}else{if(array[i]>array[1]){tem = array[1];array[1] = array[i];array[i] = tem;}else if(array[i]>array[2]){	tem = array[2];array[2] = array[i];array[i] = tem;}}//如果个数大于4 则用array[3]表示最小的数if(i>3){if(array[3] > array[i] ){tem = array[3];array[3] = array[i];array[i] = tem;}}//如果个数大于5,则用array[4]表示第二小的数if(i>4){if( array[4] > array[i]   ){tem = array[4];array[4] = array[i];array[i] = tem;}}		}tem = array[0]*array[1]*array[2];if(array.length == 3){System.out.println(tem);}if(array.length == 4){if(tem > (array[0]*array[2]*array[3]) ){System.out.println(tem);}else{System.out.println(array[0]*array[2]*array[3]);}}if(array.length >=5){if(tem > (array[0]*array[3]*array[4])){System.out.println(tem);}else{System.out.println(array[0]*array[3]*array[4]);}}}
}

这篇关于拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037319

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

poj 3723 kruscal,反边取最大生成树。

题意: 需要征募女兵N人,男兵M人。 每征募一个人需要花费10000美元,但是如果已经招募的人中有一些关系亲密的人,那么可以少花一些钱。 给出若干的男女之间的1~9999之间的亲密关系度,征募某个人的费用是10000 - (已经征募的人中和自己的亲密度的最大值)。 要求通过适当的招募顺序使得征募所有人的费用最小。 解析: 先设想无向图,在征募某个人a时,如果使用了a和b之间的关系