2026/4/16 22:22:24
网站建设
项目流程
佛山最好的网站建设公司,网站开发报价单模板,wap网站的发展,兰州酒店网站建设给你一个整数数组 nums#xff0c;返回 数组 answer #xff0c;其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请 不要使用除法#xff0c;且在 O(n) 时间复杂度…给你一个整数数组nums返回 数组answer其中answer[i]等于nums中除了nums[i]之外其余各元素的乘积 。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32 位整数范围内。请不要使用除法且在O(n)时间复杂度内完成此题。示例 1:输入:nums [1,2,3,4]输出:[24,12,8,6]示例 2:输入:nums [-1,1,0,-3,3]输出:[0,0,9,0,0]提示2 nums.length 105-30 nums[i] 30输入保证数组answer[i]在32 位整数范围内进阶你可以在O(1)的额外空间复杂度内完成这个题目吗 出于对空间复杂度分析的目的输出数组不被视为额外空间。class Solution { public: vectorint productExceptSelf(vectorint nums) { int length nums.size(); vectorint answer(length); // answer[i] 表示索引 i 左侧所有元素的乘积 // 因为索引为 0 的元素左侧没有元素 所以 answer[0] 1 answer[0] 1; for (int i 1; i length; i) { answer[i] nums[i - 1] * answer[i - 1]; } // R 为右侧所有元素的乘积 // 刚开始右边没有元素所以 R 1 int R 1; for (int i length - 1; i 0; i--) { // 对于索引 i左边的乘积为 answer[i]右边的乘积为 R answer[i] answer[i] * R; // R 需要包含右边所有的乘积所以计算下一个结果时需要将当前值乘到 R 上 R * nums[i]; } return answer; } };