1.最大乘积
import java.util.Scanner;
/**
* 题目:最大乘积
* 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
*
* 思路:
* 1.最大乘机有两种情况:(1)三个最大的正数相乘(2)两个最小的负数与最大的正数相乘
* 2.finals[]数组中存放第一步需要的5个数,最后计算乘积比较两者大小。
* @author HeMing
*
*/
public class Main1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
for (int i=0; i<n; i++) {
nums[i] = in.nextInt();
}
System.out.println(getMaximumProduct (nums,n));
}
public static long getMaximumProduct (int[] nums, int n) {
int[] finals = new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE,
Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE};
for (int i=0; i <n; i++) {
if (nums[i] < finals[0]) {
finals[1] = finals[0];
finals[0] = nums[i];
} else if (nums[i] < finals[1]) {
finals[1] = nums[i];
}
if (nums[i] > finals[4]) {
finals[2] = finals[3];
finals[3] = finals[4];
finals[4] = nums[i];
} else if(nums[i] > finals[3]) {
finals[2] = finals[3];
finals[3] = nums[i];
} else if (nums[i] > finals[2]) {
finals[2] = nums[i];
}
}
long max1 = finals[2] * 1L * finals[3] * finals[4];
long max2 = finals[0] * 1L * finals[1] * finals[4];
return Math.max(max1, max2);
}
}
2.大整数相乘
思路图示:
import java.util.Scanner;
/**
* 题目:大整数相乘
* 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
* 思路:
* 如上图所示。
* @author HeMing
*
*/
public class Main2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String num1 = in.next();
String num2 = in.next();
System.out.println(multiply(num1, num2));
}
private static String multiply(String num1, String num2) {
// TODO Auto-generated method stub
int[] num = new int[num1.length() + num2.length()-1];
for (int i = num1.length() - 1; i > -1 ; i--) {
int a = num1.charAt(i) - '0';
for (int j = num2.length() - 1; j > -1 ; j--) {
int b = num2.charAt(j) - '0';
num[i + j] += a * b;
}
}
int jinwei = 0;
for (int i = num.length-1; i > 0; i--) {
num[i] += jinwei;
jinwei = num[i] / 10;
num[i] = num[i] % 10;
}
//操作num[0]
num[0] += jinwei;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num.length; i++) {
sb.append(num[i]);
}
return sb.toString();
}
}