1822. 數組元素積的符號
已知函數?signFunc(x) 將會根據 x 的正負返回特定值:
如果 x 是正數,返回 1 。
如果 x 是負數,返回 -1 。
如果 x 是等于 0 ,返回 0 。
給你一個整數數組 nums 。令 product 為數組 nums 中所有元素值的乘積。
返回 signFunc(product) 。
示例 1:輸入:nums = [-1,-2,-3,-4,3,2,1]
輸出:1
解釋:數組中所有值的乘積是 144 ,且 signFunc(144) = 1示例 2:輸入:nums = [1,5,0,2,-3]
輸出:0
解釋:數組中所有值的乘積是 0 ,且 signFunc(0) = 0示例 3:輸入:nums = [-1,1,-1,1,-1]
輸出:-1
解釋:數組中所有值的乘積是 -1 ,且 signFunc(-1) = -1
提示:
- 1 <= nums.length <= 1000
- -100 <= nums[i] <= 100
解題思路
因為函數 signFunc(x) 將會根據 x 的正負返回特定值,而我們需要返回的結果為 signFunc(product)(product 為數組 nums 中所有元素值的乘積),所以我們不需要關心我們最后乘積的大小,我們只需要關心乘積的正負號。因此我們只需要處理:
- 一旦出現為0的元素,那么整個結果必將為0,所以我們可以直接返回0,不需要進行后面的計算
- 一旦出現負數,將原來的符號置為相反數,如果原來為1,則轉化為-1.如果原來為-1,則轉換為1.
- 如果遇到的是正數,對當前的符號沒有影響,因此不需要做任何的處理
- 一開始初始化的符號應該為1
代碼
class Solution {
public:int arraySign(vector<int>& nums) {int sum=1;for (auto c:nums) {if (c==0) return 0;if (c<0) sum=-sum;}return sum;}
};
- 時間復雜度O(n),n為nums數組的長度
- 空間復雜度O(1),只需要使用一個變量表示符號