剑指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]
生活随笔
收集整理的這篇文章主要介紹了
剑指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]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個數組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]。
不能使用除法(元素可能為0,除以0操作未定義)
思路:
B[i]的值可以看作下圖的矩陣中每行的乘積。
下三角用連乘可以很容求得,上三角,從下向上也是連乘。
因此我們的思路就很清晰了,先算下三角中的連乘,即我們先算出B[i]中的一部分,然后倒過來按上三角中的分布規律,把另一部分也乘進去。
class Solution { public:vector<int> multiply(const vector<int>& A) {vector<int>B(A.size());B[0] = 1;if(A.size() == 0) return vector<int>();else if(A.size()!=0){for(int i = 1;i<A.size();++i){B[i] = B[i-1]*A[i-1];}int tmp = 1;for(int j = A.size()-2;j>=0;j--){tmp = tmp*A[j+1];B[j] = B[j]*tmp;}}return B;} };
?
總結
以上是生活随笔為你收集整理的剑指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]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11.C程序内存空间分配
- 下一篇: 7.类的访问控制和继承