• 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
  • 相关阅读:
    数组乘积更新
    win向linux传文件
    遇到autoreconf: not found
    python thread
    aptitude
    virtualbox安装ubuntu出现“The system is running in low-graphics mode”
    webform用户控件
    LinQ to SQL
    表单验证
    文件上传
  • 原文地址:https://www.cnblogs.com/tijie/p/9891385.html
Copyright © 2020-2023  润新知