zoukankan      html  css  js  c++  java
  • LeetCode 1352. Product of the Last K Numbers

    原题链接在这里:https://leetcode.com/problems/product-of-the-last-k-numbers/

    题目:

    Implement the class ProductOfNumbers that supports two methods:

    1. add(int num)

    • Adds the number num to the back of the current list of numbers.

    2. getProduct(int k)

    • Returns the product of the last k numbers in the current list.
    • You can assume that always the current list has at least k numbers.

    At any time, the product of any contiguous sequence of numbers will fit into a single 32-bit integer without overflowing.

    Example:

    Input
    ["ProductOfNumbers","add","add","add","add","add","getProduct","getProduct","getProduct","add","getProduct"]
    [[],[3],[0],[2],[5],[4],[2],[3],[4],[8],[2]]
    
    Output
    [null,null,null,null,null,null,20,40,0,null,32]
    
    Explanation
    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); // return 20. The product of the last 2 numbers is 5 * 4 = 20
    productOfNumbers.getProduct(3); // return 40. The product of the last 3 numbers is 2 * 5 * 4 = 40
    productOfNumbers.getProduct(4); // return 0. The product of the last 4 numbers is 0 * 2 * 5 * 4 = 0
    productOfNumbers.add(8);        // [3,0,2,5,4,8]
    productOfNumbers.getProduct(2); // return 32. The product of the last 2 numbers is 4 * 8 = 32  

    Constraints:

    • There will be at most 40000 operations considering both add and getProduct.
    • 0 <= num <= 100
    • 1 <= k <= 40000

    题解:

    Have ArrayList to record previous product.

    If num == 0, all the product including this 0 would be 0. Thus clear the ArrayList.

    For last k, if k < n, then we could do list.get(n - 1) / list.get(n - k - 1). Otherwise, it would include previous 0 and return 0.

    Time Complexity: add, O(1). getProduct, O(1).

    Space: O(n). 

    AC Java: 

     1 class ProductOfNumbers {
     2     ArrayList<Integer> que = new ArrayList<>();
     3     
     4     public ProductOfNumbers() {
     5         que.add(1);    
     6     }
     7     
     8     public void add(int num) {
     9         if(num != 0){
    10             que.add(que.get(que.size() - 1) * num);
    11         }else{
    12             que = new ArrayList<>();
    13             que.add(1);
    14         }
    15     }
    16     
    17     public int getProduct(int k) {
    18         int n = que.size();
    19         return k < n ? que.get(n - 1) / que.get(n - k - 1) : 0;
    20     }
    21 }
    22 
    23 /**
    24  * Your ProductOfNumbers object will be instantiated and called as such:
    25  * ProductOfNumbers obj = new ProductOfNumbers();
    26  * obj.add(num);
    27  * int param_2 = obj.getProduct(k);
    28  */
  • 相关阅读:
    ubuntu上virtualbox无法找到usb设备【解决】
    try or install Ubuntu on MeegoPad T01
    213. 打家劫舍 II
    198. 打家劫舍
    70. 爬楼梯
    62. 不同路径
    idea | gitee 码云
    数据库 | 远程连接centos7上数据库
    JSP && Servlet | 上传图片到数据库
    bootstrap | 模态框
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12442708.html
Copyright © 2011-2022 走看看