Sword는 Offer66을 나타냅니다. 제품 배열 구축

  • 주제 : Sword는 Offer66을 참조합니다. 제품 배열 생성
    배열 a를 입력하여 배열 b를 반환하고 b [i] = a [i]를 제외한 배열 a에있는 모든 요소의 곱

  • 아이디어 :
    1. dp 트래버스 두 번 : O (n), O (1)
    일반적인 아이디어 : b [i]는 b [i-1]을 기준으로 a [i-1]을 곱하고 a를 나누는 것과 같습니다. [i], 따라서 O (n)을 한 번만 통과하면됩니다.
    이 질문은 나눗셈을 사용할 수 없습니다. b [i]와 b [i-1]의 차이 만 보면 왼쪽에서 오른쪽으로 이동하는 것을 생각하면됩니다. ] 왼쪽에는 b [i-1]에 있습니다. a [i-1]을 하나 더 곱하면됩니다. 그러나 오른쪽의 차이는 b [i]를 제외합니다. 그러나 우리가 생각하면 반대로, 즉 b [i-1]은 b [i] a [i]의 곱셈을 하나 더 기준으로합니다. 따라서 왼쪽에서 오른쪽으로 이동하여 먼저 왼쪽 곱을 계산 한 다음 오른쪽에서 왼쪽으로 이동하여 오른쪽 곱을 계산하므로 곱셈 만 사용됩니다.

class Solution {
    
    
public:
    vector<int> constructArr(vector<int>& a) {
    
    
        int n = a.size();
        vector<int> b(n, 1);//b[i]=a[i]左侧的乘积*a[r]右侧的乘积=a[0]*...*a[i-1]*a[i+1]*...*a[n-1]

        for (int i = 0, l = 1; i < n; ++i) {
    
    //从左往右遍历:求出a[i]侧的乘积
            b[i] *= l;
            l *= a[i];
        }

        for (int i = n - 1, r = 1; i >= 0; --i) {
    
    //从右往左遍历:再乘上a[i]右侧的乘积
            b[i] *= r;
            r *= a[i];
        }

        return b;
    }
};

추천

출처blog.csdn.net/jiuri1005/article/details/114495162