zoukankan      html  css  js  c++  java
  • 238. 除自身以外数组的乘积

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

    示例:

    输入: [1,2,3,4]
    输出: [24,12,8,6]
    说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

    进阶:
    你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

    solution:

     1 class Solution {
     2 public:
     3     vector<int> productExceptSelf(vector<int>& nums) {
     4         int size = nums.size();
     5         vector<int> left;left.resize(size);
     6         vector<int> right;right.resize(size);
     7         left[0] = 1;
     8         for(int i = 1;i<size;i++)
     9         {
    10             left[i] = left[i - 1] * nums[i-1];
    11         }
    12         right[size-1] = 1;
    13         for(int i = size- 2;i>=0;i--)
    14         {
    15             right[i] = right[i + 1] * nums[i + 1];
    16         }
    17         for(int i = 0;i<size;i++)
    18         {
    19             left[i]*=right[i];
    20         }
    21         return left;
    22     }
    23 };

    思考:对于任意位置上的num[i]而言,它在output对应的结果应该是0~i-1和i+1~nus.size()-1两个部分积的乘积,用两个数组分别继续i左右乘积,最后乘起来形成output

    当然,大佬提供了只需要一个output数组的方法,但思路和上面没什么区别:

    solution2:

     1 class Solution {
     2 public:
     3     vector<int> productExceptSelf(vector<int>& nums) {
     4         int size = nums.size();
     5         vector<int> output;output.resize(size);
     6         int left =1,right=1;
     7         for(int i = 0;i<size;i++)
     8         {
     9             output[i] = left;
    10             left *= nums[i];
    11         }
    12         for(int i = size- 1;i>=0;i--)
    13         {
    14             output[i] *=right;
    15             right*=nums[i];
    16         }
    17         return output;
    18     }
    19 };

    最后:有人说这种题只是考奇技淫巧的,但是你要明白,“会就是会,不会就是不会”,一旦考到,笑到最后的会是我。

  • 相关阅读:
    android一个纠结的VFY错误
    icon在线编辑和查找工具
    增加Android可用内存
    android对大图片的缓存处理
    MySQL sql语句大全
    Canvas
    Docker 微服务教程
    Docker 入门教程
    项目管理
    JavaScript standard 代码规范的全文
  • 原文地址:https://www.cnblogs.com/Swetchine/p/11257118.html
Copyright © 2011-2022 走看看