java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}

时间:2023-11-24 19:48:56
 /**
* 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] =
* input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40,
* 30, 24}
*
* @author Administrator
*
*/
public class Test5 {
public static void main(String[] args) {
int[] arr = { 3, 2, 3, 7 };
for (int i : cal(arr)) {
System.out.print(i + " ");
}
System.out.println(); for (int i : cal2(arr)) {
System.out.print(i + " ");
} System.out.println();
} /*
* 方法1,首先计算整个数组全部项的成绩然后除以当前项的值,此处考虑使用long类型的数据
*/
public static int[] cal(int[] arr) {
// 得到数组的所有数的成绩
int result = 1;
// 同样都是两个for循环
for (int i = 0; i < arr.length; i++) {
result = result * arr[i];
}
int[] reArr = new int[arr.length];
for (int i = 0; i < reArr.length; i++) {
reArr[i] = result / arr[i];
} return reArr;
} /*
* 方法2,
*/ public static int[] cal2(int[] inputArr) {
int[] result = new int[inputArr.length];
int len = result.length;
result[0] = 1;
// 从1位置开始result[i]的值表示输入数组的前i项的值
for (int i = 1; i < len; i++) {
result[i] = result[i - 1] * inputArr[i - 1];
}
// 计算从i项开始后面项的值
// 这里只能是倒叙相乘
int temp = 1;
for (int i = len - 2; i >= 0; i--) {
// 最后一项
temp = temp * inputArr[i + 1];
result[i] = result[i] * temp;
}
return result; }
}