• 两道关于前缀和的算法题


    今天看到了两道有关于前缀和应用的的算法题,解法挺巧妙的,分享给大家。

    在这里直接放上我的代码,题目和注释在代码解释的都非常清楚。

     1     /*
     2      * 题目描述:给定一个数组a[N],我们希望构造数组b[N],
     3      * 其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。
     4      * 在构造过程:不允许使用除法;要求:O(1)空间复杂度和O(n)时间复杂度;
     5      * 除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等);
     6      */
     7     class ConstructeAarry
     8     {
     9         public void ConstructeAarrySolution(double[] nums)
    10         {
    11             int length = nums.Length;
    12             double[] result = new double[length];//存放结果
    13             //先计算后缀积
    14             for (int i = length - 1; i >= 0; i--)
    15             {
    16                 result[i] = nums[i] * (i == length - 1 ? 1 : result[i + 1]);
    17             }
    18             //再计算前缀积,就会得出结果
    19             double j=1.0;
    20             for (int i = 0; i < length; j *= nums[i++])
    21             {
    22                 result[i] = j * (i == length - 1 ? 1 : result[i + 1]);
    23             }
    24         }
    25     }
    26 
    27 
    28 
    29     /*
    30      * 题目描述:现有一个数组,里面包含了正数和负数,取其中若干个连续的数,要求这些数的和的绝对值最小 
    31      * 对数组A[1....N],做和运算S[1...N],其中S[1] = A[1]; S[2] = A[1]+A[2];...;S[N]=A[1]+A[2]+A[3]+...+A[N]
    32      * 把所有和在数轴上表示出来,则最小值只会出现在相邻两个数之间,故需要排序,所以算法的时间复杂度主要取决于排序的时间复杂度
    33      * 在这里使用快速排序算法
    34      */
  • 相关阅读:
    从Object对象中读取属性的值
    CentOS7安装Mysql
    CentOS初使用命令总结
    linux安装git、node、pm2
    将 ELASTICSEARCH 写入速度优化到极限
    Elasticsearch
    elasticsearch5.0.1集群索引分片丢失的处理
    ELASTICSEARCH健康red的解决
    使用linux远程登录另一台linux
    fiddler构造表单上传文件的请求
  • 原文地址:https://www.cnblogs.com/FJuly/p/4594000.html
Copyright © 2020-2023  润新知