leetcode六月每日一題 leetcode 238

在這裏插入圖片描述
這道題看提示說不要用除法,我心裏一想,爲啥會用到除法?原來可以將所有數組裏的元素全都乘起來,然後除去每個遍歷的元素。。。但是此法禁止用啊~

看了一下,用左右乘積這個方法來求很巧妙。
具體就是設置一個left用來保存當前掃描到元素左邊所有元素的乘積,用right來保存當前掃描到元素右邊所有元素的乘積。 然後一個循環之後,也就是經歷了一個交叉後,將左右元素乘積都乘一起了 也就求解了~

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        
        int n=nums.size();
        int left=1,right=1;     //left:從左邊累乘,right:從右邊累乘
        vector<int> res(n,1);
        
        for(int i=0;i<n;++i)    //最終每個元素其左右乘積進行相乘得出結果
        {
            res[i]*=left;       //乘以其左邊的乘積
            left*=nums[i];
            
            res[n-1-i]*=right;  //乘以其右邊的乘積
            right*=nums[n-1-i];
        }
        
        return res;
        
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章