程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> LeetCode 238 Product of Array Except Self解析(除自身外數組其余數的乘積)

LeetCode 238 Product of Array Except Self解析(除自身外數組其余數的乘積)

編輯:關於C++

翻譯

給定一個有n個數字的數組nums,其中n大於1,返回一個數組使得output[i]等於除nums[i]外所有元素的乘積。

不用分治並且在O(n)復雜度下解決這個問題。

例如,給定[1, 2, 3, 4],返回[24, 12, 8, 6]。

跟進:
你可以只在常量空間下完成它嗎?
(備注:在空間復雜度計算時輸出數組不作為額外空間。)

原文

Given an array of n integers where n > 1, nums, 
return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

Solve it without division and in O(n).

For example, given [1,2,3,4], return [24,12,8,6].

Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)

分析

其實之前做過一道類似的題目,不過想不起來是哪題了。

看到題目的常量空間就想到和之前的一樣,把所有元素的乘積保存起來,最後再一個一個除就好了不是嗎?

然而有問題……

如果數組中有一個零叻?

假設其索引是index,那麼output[index]就是其余所有元素的乘積,也就是不計算0的乘積。

output數組的其余所有元素都是0。

如果數組中有兩個及以上零叻?

什麼都不用說,直接初始化為0吧。

如果數組中沒有0叻?

那還不謝天謝地了,直接一個一個除了保存到vector嘛。

代碼

class Solution {
public:
    vector productExceptSelf(vector& nums) {
        int count = 0;
        int pro = 1;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] == 0)           count++;
            else            pro *= nums[i];
        }       
        if (count == 1) {
            vector res;
            for (int i = 0; i < nums.size(); i++) {
                if (nums[i] == 0)               res.push_back(pro);
                else                res.push_back(0);
            }
            return res;
        }
        else if (count >= 2) {
            vector res(nums.size());
            return res;
        }
        else {
            vector res;
            for (int i = 0; i < nums.size(); i++)
                res.push_back(pro / nums[i]);
            return res;
        }       
    }
};
   
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved