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

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

    示例:

    输入: [1,2,3,4]
    输出: [24,12,8,6]

    说明: 不要使用除法,且在 O(n) 时间复杂度内完成此题。

    思路:主要还是靠蒙,既然要在O(n)复杂度,再加上是乘积立刻就想到了前缀和,然后蒙一下一下到这跑前缀和,就发现了一个规律

    1 ans[i]=sum[i-1]*resum[i+1];
    规律

    除了第一个和最后一个都满足了,

    既然跑了正序前缀和,倒序前缀和,name第一个和最后一个就很简单了

    代码:

     1 int sum[101011];
     2 int resum[101110];
     3 
     4 int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
     5     for(int i=0;i<=numsSize;i++)
     6         sum[i]=1;
     7 
     8     int newArrSize = numsSize+numsSize;
     9     int *ans = (int *)malloc(sizeof(int) * newArrSize);
    10     sum[0]=nums[0];
    11 
    12     ans[0]=1;
    13     for(int i=1;i<numsSize;i++)
    14         sum[i]=sum[i-1]*nums[i],ans[0]*=nums[i];
    15 
    16     resum[numsSize-1]=nums[numsSize-1];
    17     for(int i=numsSize-2;i>=0;i--)
    18         resum[i]=resum[i+1]*nums[i];
    19 
    20     ans[numsSize-1]=sum[numsSize-2];
    21     for(int i=1;i<numsSize-1;i++)
    22         ans[i]=sum[i-1]*resum[i+1];
    23 
    24 //    for(int i=0;i<numsSize;i++)
    25 //        printf("%d ",ans[i]);
    26     *returnSize=numsSize;
    27     return ans;
    28 }
    View Code
  • 相关阅读:
    关于类型转换构造函数的疑惑点
    类模板与静态 成员变量
    模板与友元
    类模板与派生
    类模板
    函数模板
    泛型程序设计基本概念
    3、成员函数
    条款 06:若不想使用编译器自动生成的函数,就该明确拒绝
    PHP操作redis
  • 原文地址:https://www.cnblogs.com/tijie/p/9891385.html
Copyright © 2011-2022 走看看