請你實現乙個「數字乘積類」productofnumbers,要求支援下述兩種方法:
1. add(int num)
將數字 num 新增到當前數字列表的最後面。
2. getproduct(int k)
返回當前數字列表中,最後 k 個數字的乘積。
你可以假設當前列表中始終 至少 包含 k 個數字。
題目資料保證:任何時候,任一連續數字序列的乘積都在 32-bit 整數範圍內,不會溢位。
示例:
輸入:["productofnumbers","add","add","add","add","add","getproduct","getproduct","getproduct","add","getproduct"]
[,[3],[0],[2],[5],[4],[2],[3],[4],[8],[2]]
輸出:[null,null,null,null,null,null,20,40,0,null,32]
解釋:add 和 getproduct 兩種操作加起來總共不會超過 40000 次。productofnumbers productofnumbers = new productofnumbers();
productofnumbers.add(3); // [3]
productofnumbers.add(0); // [3,0]
productofnumbers.add(2); // [3,0,2]
productofnumbers.add(5); // [3,0,2,5]
productofnumbers.add(4); // [3,0,2,5,4]
productofnumbers.getproduct(2); // 返回 20 。最後 2 個數字的乘積是 5 * 4 = 20
productofnumbers.getproduct(3); // 返回 40 。最後 3 個數字的乘積是 2 * 5 * 4 = 40
productofnumbers.getproduct(4); // 返回 0 。最後 4 個數字的乘積是 0 * 2 * 5 * 4 = 0
productofnumbers.add(8); // [3,0,2,5,4,8]
productofnumbers.getproduct(2); // 返回 32 。最後 2 個數字的乘積是 4 * 8 = 32
0 <= num <= 100
1 <= k <= 40000
【思路】
這題直接暴力搜尋,對於特例單獨處理;如果碰到一連串的1,我們只需在陣列存一邊並且標記出現的1的次數。
typedef struct productofnumbers;
productofnumbers* productofnumberscreate()
void productofnumbersadd(productofnumbers* obj, int num) elseelse
}}int productofnumbersgetproduct(productofnumbers* obj, int k)
sum*=obj->num[i][0];
k--;
if(sum==0)
return 0;
}return sum;
}void productofnumbersfree(productofnumbers* obj)
/** * your productofnumbers struct will be instantiated and called as such:
* productofnumbers* obj = productofnumberscreate();
* productofnumbersadd(obj, num);
* int param_2 = productofnumbersgetproduct(obj, k);
* productofnumbersfree(obj);
*/
5341 最後 K 個數的乘積
請你實現乙個 數字乘積類 productofnumbers,要求支援下述兩種方法 1.add int num 將數字 num 新增到當前數字列表的最後面。2.getproduct int k 返回當前數字列表中,最後 k 個數字的乘積。你可以假設當前列表中始終 至少 包含 k 個數字。題目資料保證 ...
Leetcode 最小K個數
思路 基於快排改進 選取arr 0 作為基準值,tmp arr 0 排序後,返回tmp的下標index 此時,arr index 左側的值都小於tmp,右側的值都大於tmp。如果k index,那麼從起始點0到下標index 1的值就為最小的k個數,如果k index,說明k個數在區間 0,inde...
Leetcode 移掉k位數字
給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例 2 輸入 num 10200 k 1 輸出 200 解釋 移掉首位...