剑指Offer-构建乘积数组

剑指Offer-构建乘积数组

题目描述

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。不能使用除法。

思路

思路一:

用双层for循环,当A中索引与B中索引相同时,不做处理,否则乘上A中元素

思路二:

B[i] = A[0] * A[1] * ... * A[i-1] * A[i+1] * ... * A[n-1]

从左到右算 B[i] = A[0] * A[1] * ... * A[i-1]

从右到左算B[i] = A[i+1] ... * A[n-1]

代码实现

package Array; /** * 构建乘积数组 * 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。 * 不能使用除法。 */ public class Solution16 { public static void main(String[] args) { Solution16 solution16 = new Solution16(); int[] A = {1, 2, 3, 4, 5}; int[] B = solution16.multiply(A); for (int i = 0; i < B.length; i++) { System.out.println(B[i]); } } /** * B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1] * 从左到右算 B[i]=A[0]*A[1]*...*A[i-1] * 从右到左算B[i]*=A[i+1]*...*A[n-1] * * @param A * @return */ public int[] multiply_2(int[] A) { int[] B = new int[A.length]; if (A.length != 0) { B[0] = 1; for (int i = 1; i < A.length; i++) { B[i] = B[i - 1] * A[i - 1]; } int temp = 1; for (int j = A.length - 2; j >= 0; j--) { temp *= A[j + 1]; B[j] *= temp; } } return B; } /** * 用双层for循环,当A中索引与B中索引相同时,不做处理,否则乘上A中元素 * * @param A * @return */ public int[] multiply(int[] A) { int[] B = new int[A.length]; if (A.length != 0) { for (int i = 0; i < A.length; i++) { B[i] = 1; for (int j = 0; j < A.length; j++) { if (i != j) { B[i] *= A[j]; } } } } return B; } } 
posted @ 2018-03-22 14:07 武培轩 阅读( ...) 评论( ...) 编辑 收藏
全部评论

相关推荐

2025-11-08 21:43
济南大学 Java
1.3000~4000,一般对于双非本来说,hr能给出这种薪资,完完全全是侮辱人,而且我感觉是那种毛病贼多的小公司,遇上脾气不好的,能直接开骂,3-4k真的能招到人吗,属于是拉完了。2.4000~6000,可能是考研失败或者是hr看着是学校确实没那么好给出的价,如果是考研失败想找个地方过度一下准备二战的话,可以去一下,毕竟确实给的不多,校招都给这么点了,长期干的话薪资也不会涨到哪里去,这里给到npc。3.6000~8000,取中位数7k来看,除了某些提前规划大学生活,积累实习进入大厂的,我感觉这是大部分双非本能够拿到的工资,因为不管是boss上还是其他渠道,感觉普通后端开发都是这个数(以山东济南这边的情况来看),如果能双休而且是对口工作的话,这个薪资范围对双非本来说还是可以的,这里给到人上人。4.8000~10000,这个区间来看,感觉超越80%的双非本的同学了,如果你是9k而且双休,那简直是太舒服了,毕竟学历摆在那里,能拿到这个数,已经是“空调wifi冰镇西瓜”的级别了,这里必须夯爆了。5.10~15k,周围的同学极少能拿到这个数,甚至除了进大厂的同学们,很少看到双非本能拿到这个数,当然我指的是普通双非,但是能拿这个数,加班也少不了,而且如果能拿到这个数(相较于9k),那加班我感觉是少不了的,需要天天加班好几个小时,甚至双休都不能保证,但是能拿到这些数了,加会儿班就无可厚非了。第二点,如果能拿到这个薪资,那么这个同学肯定是在学习路上付出了很多的努力来弥补学历上带来的不足。在大学期间需要马不停蹄的来学习,如果也要严重加班的话,那综合来看,我会给到顶级。最后,目前我也是一名应届生,上述也是以山东目前的情况来说(如果是北上广深这样的城市那需要另外斟酌),以自己找工作的经历以及互联网上观察到的双非本的同学的秋招情况来看的,目前也还有好多的同学没有拿到心仪的offer,祝愿同学们拿到自己心仪的工作!!
一天代码十万三:都互联网了,就别看山东情况了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务