zoukankan      html  css  js  c++  java
  • Leetcode 238 Product of Array Except Self 递推

    给出一个数组 nums[i](i = 0,1,...,n-1)  输出数组output[i]满足 output[i] = nums[0] * num[1] * num[2] *..*num[i-1] * num[i+1]*... *num[n-1]

    要求不能使用除了output之外的大内存,满足时间复杂度O(n), 空间复杂度O(1)。

    分析下我们可以令dpf[i] = nums[0] * num[1] * num[2] *..*num[i-1] 而 dpb[i] =  num[i+1]*... *num[n-1];

    而output[i] = dpf[i] *  dpb[i];dpd[i]可以在作为常数mul出现,而dpf[i]可以预存在 output[i]中。

    注意:当n=1时的判断。

     1 class Solution {
     2 public:
     3     std::vector<int> productExceptSelf(std::vector<int>& nums) {
     4         std::vector<int> output(nums.size(), 1);
     5         if(nums.size() == 1) return nums;
     6         for(std::vector<int>::size_type i =  1; i < nums.size(); ++i){
     7             output[i] *= output[i-1] * nums[i -1]; 
     8         }
     9         int mul = 1;
    10         for(int i =  nums.size() - 2 ; i >= 0 ; --i){
    11             mul *= nums[i + 1];
    12             output[i] *= mul;
    13         }
    14         return output;
    15     }
    16 };
  • 相关阅读:
    快速幂 快速乘法
    扩展欧几里得学习笔记
    求逆序数数目(树状数组+离散化)
    隐式图的遍历
    随机数生成
    推倒重来
    动态规划初步
    子集生成
    东大oj1155 等凹函数
    P1278 单词游戏
  • 原文地址:https://www.cnblogs.com/onlyac/p/5135996.html
Copyright © 2011-2022 走看看