Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d3038a8

Browse files
Add solution for Product of the Last K Numbers
1 parent d563fd5 commit d3038a8

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

‎README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ Algorithm exercises from LeetCode implemented in Java v11.
9898
- Longest Substring Without Repeating Characters | [Problem](https://leetcode.com/problems/longest-substring-without-repeating-characters) | [Solution](src/solutions/LongestSubstringWithoutRepeatingCharacters.java)
9999
- Sliding Window Maximum | [Problem](https://leetcode.com/problems/sliding-window-maximum) | [Solution](src/solutions/SlidingWindowMaximum.java)
100100

101+
### Prefix Sum
102+
- Product of the Last K Numbers | [Problem](https://leetcode.com/problems/product-of-the-last-k-numbers) | [Solution](src/solutions/ProductOfNumbers.java)
103+
101104
### Recursion
102105
- Closest Binary Search Tree Value | [Problem](https://leetcode.com/problems/closest-binary-search-tree-value)
103106
- Subtree Of Another Tree | [Problem](https://leetcode.com/problems/subtree-of-another-tree) | [Solution](src/solutions/SubtreeOfAnotherTree.java)

‎src/solutions/ProductOfNumbers.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package solutions;
2+
3+
// [Problem] https://leetcode.com/problems/product-of-the-last-k-numbers
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
// Prefix product
9+
class ProductOfNumbers {
10+
List<Integer> prefix; // O(n) space
11+
12+
public ProductOfNumbers() {
13+
prefix = new ArrayList<>();
14+
prefix.add(1);
15+
}
16+
17+
// O(1) time
18+
public void add(int num) {
19+
if (num != 0) {
20+
int lastPrefix = prefix.get(prefix.size() - 1);
21+
prefix.add(lastPrefix * num);
22+
} else {
23+
prefix = new ArrayList<>();
24+
prefix.add(1);
25+
}
26+
}
27+
28+
// O(1) time
29+
public int getProduct(int k) {
30+
int n = prefix.size();
31+
if (k >= n) {
32+
return 0;
33+
}
34+
return prefix.get(n - 1) / prefix.get(n - k - 1);
35+
}
36+
37+
// Test
38+
public static void main(String[] args) {
39+
ProductOfNumbers productOfNumbers = new ProductOfNumbers();
40+
productOfNumbers.add(3); // [3]
41+
productOfNumbers.add(0); // [3,0]
42+
productOfNumbers.add(2); // [3,0,2]
43+
productOfNumbers.add(5); // [3,0,2,5]
44+
productOfNumbers.add(4); // [3,0,2,5,4]
45+
System.out.println(productOfNumbers.getProduct(2)); // return 20. The product of the last 2 numbers is 5 * 4 = 20
46+
System.out.println(productOfNumbers.getProduct(3)); // return 40. The product of the last 3 numbers is 2 * 5 * 4 = 40
47+
System.out.println(productOfNumbers.getProduct(4)); // return 0. The product of the last 4 numbers is 0 * 2 * 5 * 4 = 0
48+
productOfNumbers.add(8); // [3,0,2,5,4,8]
49+
System.out.println(productOfNumbers.getProduct(2)); // return 32. The product of the last 2 numbers is 4 * 8 = 32
50+
}
51+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /