zoukankan      html  css  js  c++  java
  • Careercup

    2014-05-01 00:45

    题目链接

    原题:

    input [2,3,1,4] 
    output [12,8,24,6] 
    
    Multiply all fields except it's own position. 
    
    Restrictions: 
    1. no use of division 
    2. complexity in O(n)

    题目:给定一个整数数组,将个元素变为其他元素的乘积,例如[2, 3, 1, 4]变为[12, 8, 24, 6]。限制不准用除法,而且时间复杂度为线性级别。

    解法:用一个额外的数组能够完成O(n)时间的算法。由于每个元素在变化之后,应该等于左边和右边的累计乘积,所以两边的累计乘积必须同时能够知道。一边可以用O(1)空间扫描得到,另一边只能用O(n)空间进行记录。时间空间复杂度均为O(n),请看代码。

    代码:

     1 // http://www.careercup.com/question?id=5179916190482432
     2 #include <cstdio>
     3 #include <vector>
     4 using namespace std;
     5 
     6 void multiplyArray(vector<int> &v)
     7 {
     8     vector<int> vp;
     9     int p;
    10     int i;
    11     int n = (int)v.size();
    12     
    13     vp.resize(n);
    14     p = 1;
    15     for (i = 0; i <= n - 1; ++i) {
    16         vp[i] = p;
    17         p *= v[i];
    18     }
    19     
    20     p = 1;
    21     for (i = n - 1; i >= 0; --i) {
    22         vp[i] = p * vp[i];
    23         p *= v[i];
    24     }
    25 
    26     for (i = 0; i < n; ++i) {
    27         v[i] = vp[i];
    28     }
    29     
    30     vp.clear();
    31 }
    32 
    33 int main()
    34 {
    35     int i, n;
    36     vector<int> v;
    37     
    38     while (scanf("%d", &n) == 1 && n >= 0) {
    39         v.resize(n);
    40         for (i = 0; i < n; ++i) {
    41             scanf("%d", &v[i]);
    42         }
    43         multiplyArray(v);
    44         for (i = 0; i < n; ++i) {
    45             printf((i ? " %d" : "%d"), v[i]);
    46         }
    47         putchar('
    ');
    48     }
    49     
    50     return 0;
    51 }
  • 相关阅读:
    linux 常用快捷键
    命令行远程链接
    mybatis参数错误 Parameter '×××' not found. Available parameters are [0, 1, param1, param2]
    mybatis延迟加载
    mybatis跨XML引用
    eclipse修改项目名称
    wait, WIFEXITED, WEXITSTATUS
    进程通信中如何进行值得传递?
    fork新建进程
    Ubuntu安装genymotion模拟器步骤
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3702438.html
Copyright © 2011-2022 走看看