• 剑指OFFER 构建乘积数组


    剑指OFFER 构建乘积数组

    题目描述

    给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。不能使用除法。

    分析

    题目说不能用除法,有点奇怪,明明用除法是最快的...不管了就先按题目写出来

    代码(暴力)

    class Solution {
    public:
        vector<int> multiply(const vector<int>& A) {
            vector<int> res;
            for(int i=0;i<A.size();i++)
            {
                int e=1;
                for(int j=0;j<A.size();j++)
                {
                    if(i==j)continue;
                    e *= A[j];
                }
                res.push_back(e);
            }
            return res;
        }
    };
    

    代码(去掉重复操作)

    看了一些资料才领会题目意图,分两部分处理

    class Solution {
    public:
        vector<int> multiply(const vector<int>& A) {
            vector<int> res;
            vector<int> first_half(A.size(),1);
            vector<int> second_half(A.size(),1);
            //上半部分
            for(int i=1;i<A.size();i++)
            {
                first_half[i]=A[i-1]*first_half[i-1];
            }
            //下半部分
            for(int i=A.size()-2;i>=0;i--)
            {
                second_half[i]=A[i+1]*second_half[i+1];
            }
            //整合两部分
            for(int i=0;i<A.size();i++)
            {
                res.push_back(first_half[i]*second_half[i]);
            }
            return res;
        }
    };
    
  • 相关阅读:
    leveldb实现类sql查询
    系统设计
    Code Complete
    工具 VSCode快捷键
    C/C++ extern
    C/C++ 宏字符串拼接
    【Java】字符串
    【Java】常用类-sysytem-math
    【Java】枚举
    【Java】内部类
  • 原文地址:https://www.cnblogs.com/virgildevil/p/12255435.html
Copyright © 2020-2023  润新知