LeetCode5341 最後 K 個數的乘積

2021-10-02 21:30:22 字數 2116 閱讀 4963

請你實現乙個「數字乘積類」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]

解釋:

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 

add 和 getproduct 兩種操作加起來總共不會超過 40000 次。

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 解釋 移掉首位...