本文主要是介绍2022-02-02(238. 除自身以外数组的乘积),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
方法一:左右乘积列表
class Solution {public int[] productExceptSelf(int[] nums) {int n=nums.length;int[] result=new int[n];if(n==0){return result;}int[] qian=new int[n];int[] hou=new int[n];qian[0]=nums[0];hou[n-1]=nums[n-1];for(int i=1;i<n;i++){qian[i]=qian[i-1]*nums[i];}for(int i=n-2;i>0;i--){hou[i]=hou[i+1]*nums[i];}result[0]=hou[1];result[n-1]=qian[n-2];for(int i=1;i<n-1;++i){result[i]=qian[i-1]*hou[i+1];}return result;}
}
方法二:空间复杂度 O(1)O(1) 的方法
由于输出数组不算在空间复杂度内,那么我们可以将 L 或 R 数组用输出数组来计算。先把输出数组当作 L 数组来计算,然后再动态构造 R 数组得到结果
class Solution {public int[] productExceptSelf(int[] nums) {int length = nums.length;int[] answer = new int[length];// answer[i] 表示索引 i 左侧所有元素的乘积// 因为索引为 '0' 的元素左侧没有元素, 所以 answer[0] = 1answer[0] = 1;for (int i = 1; i < length; i++) {answer[i] = nums[i - 1] * answer[i - 1];}// R 为右侧所有元素的乘积// 刚开始右边没有元素,所以 R = 1int R = 1;for (int i = length - 1; i >= 0; i--) {// 对于索引 i,左边的乘积为 answer[i],右边的乘积为 Ranswer[i] = answer[i] * R;// R 需要包含右边所有的乘积,所以计算下一个结果时需要将当前值乘到 R 上R *= nums[i];}return answer;}
}
这篇关于2022-02-02(238. 除自身以外数组的乘积)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!