java笔试题-给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
2019-03-10 23:30
1066 查看
package com.zjp.offer.study; import java.io.IOException; import java.util.Scanner; /** * 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大. * 要求时间复杂度:O(n),空间复杂度:O(1) */ public class MaxProduct { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); int len = sc.nextInt(); long[] arr = new long[len]; for (int i = 0; i < len; i++) { arr[i] = sc.nextLong(); } long maxProduct = maxProduct(arr); System.out.println(maxProduct); } /** * 思路:定义五个数:一个最大,一个次大,一个第三大,一个最小,一个次小 * 只要找出这五个数,问题就解决了 * @param arr * @return */ private static long maxProduct(long[] arr) { //max1,max2,max3用于记录最大,次大,第三大的数 long max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE; //min1,min2用于记录最小,次小的数 long min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE; for (long num : arr) { if (num > max1) { max3 = max2; max2 = max1; max1 = num; } else if (num > max2) { max3 = max2; max2 = num; } else if (num > max3) { max3 = num; } if (num < min1) { min2 = min1; min1 = num; } else if (num < min2) { min2 = num; } } return Math.max(max1 * max2 * max3, min1 * min2 * max1); } }
相关文章推荐
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大 java实现
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
- 给定无序整数数组,包含正数,负数和0,求三个数的乘积最大
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 搜狐笔试题:给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- 拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积
- 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- 有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?
- 给定一个整数数组,找出两个下标,要求后面下标所指的数减去前面下标所指的数之差最大
- 给定只包含正数的数组,给出一个方法,将数组中的数拼接起来,得到的数,是最大的。
- 给定一个整数数组,找出数组中不存在的最小的正整数。该数组还可以包含重复数和负数。Python实现
- 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
- 一个长度为N的数组中包含正数 负数 0,请实现一个函数找出和为0的最长子数列
- 求一个不含0的数列(可以有正数和负数)的最大子序列乘积java
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)