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 }

 

posted @ 2016-09-23 15:09  我所向往的美好  阅读(1879)  评论(0编辑  收藏  举报