java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
1 /** 2 * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = 3 * input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 4 * 30, 24} 5 * 6 * @author Administrator 7 * 8 */ 9 public class Test5 { 10 public static void main(String[] args) { 11 int[] arr = { 3, 2, 3, 7 }; 12 for (int i : cal(arr)) { 13 System.out.print(i + " "); 14 } 15 System.out.println(); 16 17 for (int i : cal2(arr)) { 18 System.out.print(i + " "); 19 } 20 21 System.out.println(); 22 } 23 24 /* 25 * 方法1,首先计算整个数组全部项的成绩然后除以当前项的值,此处考虑使用long类型的数据 26 */ 27 public static int[] cal(int[] arr) { 28 // 得到数组的所有数的成绩 29 int result = 1; 30 // 同样都是两个for循环 31 for (int i = 0; i < arr.length; i++) { 32 result = result * arr[i]; 33 } 34 int[] reArr = new int[arr.length]; 35 for (int i = 0; i < reArr.length; i++) { 36 reArr[i] = result / arr[i]; 37 } 38 39 return reArr; 40 } 41 42 /* 43 * 方法2, 44 */ 45 46 public static int[] cal2(int[] inputArr) { 47 int[] result = new int[inputArr.length]; 48 int len = result.length; 49 result[0] = 1; 50 // 从1位置开始result[i]的值表示输入数组的前i项的值 51 for (int i = 1; i < len; i++) { 52 result[i] = result[i - 1] * inputArr[i - 1]; 53 } 54 // 计算从i项开始后面项的值 55 // 这里只能是倒叙相乘 56 int temp = 1; 57 for (int i = len - 2; i >= 0; i--) { 58 // 最后一项 59 temp = temp * inputArr[i + 1]; 60 result[i] = result[i] * temp; 61 } 62 return result; 63 64 } 65 }
开始在code,我的个人特色。