摘要:题目描述给定一个数组请构建一个数组其中中的元素。思路代码注意特殊设置数组和的初始值需要注意的就是两个循环的边界条件
题目描述
给定一个数组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]。不能使用除法。
思路 代码import Strategy.Strategy; import java.lang.reflect.Array; import java.util.Arrays; public class MultiArr { public static void main(String[] args){ MultiArr multiArr = new MultiArr(); int[] a = {1, 2, 3,4,5}; // int[] a = {1,2}; /*int[] a = {1, 2, 3,4,5,6}; int[] a = {1, 2, 3,4,5,6};*/ int[] multiply = multiArr.multiply(a); System.out.println(Arrays.toString(multiply)); } public int[] multiply(int[] A) { //注意特殊case if(A.length == 0 || A == null)return A; if(A.length == 1) return A; int len = A.length; int[] B = new int[len]; int[] C = new int[len]; //设置数组C和D的初始值 C[0] = 1; C[1] = A[0]; int[] D = new int[len]; D[len - 1] = 1; D[len - 2] = A[len - 1]; //需要注意的就是两个for循环的边界条件 for(int i = 1; i < len - 1; i++){ C[i + 1] = C[i ] * A[i]; } for(int i = len - 2; i >= 0; i--){ D[i] = D[i+1] * A[i+1]; } for(int i = 0; i < len; i++){ B[i] = C[i] * D[i]; } return B; } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74955.html
摘要:动态规划复杂度时间空间思路分析出自身以外数组乘积的性质,它实际上是自己左边左右数的乘积,乘上自己右边所有数的乘积。所以我们可以用一个数组来表示第个数字前面数的乘积,这样。同理,我们可以反向遍历一遍生成另一个数组。 Product of Array Except Self Given an array of n integers where n > 1, nums, return an...
摘要:题目乘积最大子序列给定一个整数数组,找出一个序列中乘积最大的连续子序列该序列至少包含一个数。示例输入输出解释结果不能为因为不是子数组。当大于时如果,,如果,,时间复杂度和空间复杂度均为,其中是数组中的元素个数。动态规划法参考自 题目 乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4]输出:...
摘要:题目要求从一个整数数组中找到一个子数组,该子数组中的所有元素的乘积最大。比如数组的最大乘积子数组为思路与代码这题目考察了动态编程的思想。至于为什么还要比较,是因为如果是一个负数的,那么之前的最小乘积在这里可能就成为了最大的乘积了。 题目要求 Find the contiguous subarray within an array (containing at least one num...
阅读 3148·2021-11-19 09:40
阅读 3632·2021-11-16 11:52
阅读 2967·2021-11-11 16:55
阅读 3131·2019-08-30 15:55
阅读 1154·2019-08-30 13:08
阅读 1618·2019-08-29 17:03
阅读 2983·2019-08-29 16:19
阅读 2561·2019-08-29 13:43