From 6a28e75202feca3017c26381436bbdaca561cb30 Mon Sep 17 00:00:00 2001 From: PrakarshKamal Date: Mon, 4 May 2026 01:06:23 -0400 Subject: [PATCH] Complete Competitive-Coding-10 --- BestTimeBuySellStockII.java | 13 ++++++ PeekingIterator.java | 84 +++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 BestTimeBuySellStockII.java create mode 100644 PeekingIterator.java diff --git a/BestTimeBuySellStockII.java b/BestTimeBuySellStockII.java new file mode 100644 index 0000000..d094f10 --- /dev/null +++ b/BestTimeBuySellStockII.java @@ -0,0 +1,13 @@ +// Greedy O(n) time, O(1) space +class Solution { + public int maxProfit(int[] prices) { + int maxProfit = 0; + + for (int i = 1; i < prices.length; i++) { + if (prices[i] > prices[i-1]) { + maxProfit += prices[i] - prices[i-1]; + } + } + return maxProfit; + } +} \ No newline at end of file diff --git a/PeekingIterator.java b/PeekingIterator.java new file mode 100644 index 0000000..4542249 --- /dev/null +++ b/PeekingIterator.java @@ -0,0 +1,84 @@ +// Java Iterator interface reference: +// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html + +// Brute force O(n) time, O(n) space +// class PeekingIterator implements Iterator { + +// List list; +// int idx; + +// public PeekingIterator(Iterator iterator) { +// // initialize any member here. +// this.list = new ArrayList<>(); +// this.idx = 0; + +// while (iterator.hasNext()) { +// list.add(iterator.next()); +// } +// } + +// // Returns the next element in the iteration without advancing the iterator. +// public Integer peek() { +// return list.get(idx); +// } + +// // hasNext() and next() should behave the same as in the Iterator interface. +// // Override them if needed. +// @Override +// public Integer next() { +// int val = list.get(idx); +// idx++; +// return val; +// } + +// @Override +// public boolean hasNext() { +// return idx < list.size(); +// } +// } + + +// O(1) time, O(1) space + +import java.util.*; + +class PeekingIterator implements Iterator { + + Iterator itr; + Integer nextVal; + + public PeekingIterator(Iterator iterator) { + // initialize any member here. + this.itr = iterator; + if (itr.hasNext()) { + nextVal = itr.next(); + } + else { + nextVal = null; + } + } + + // Returns the next element in the iteration without advancing the iterator. + public Integer peek() { + return nextVal; + } + + // hasNext() and next() should behave the same as in the Iterator interface. + // Override them if needed. + @Override + public Integer next() { + Integer temp = nextVal; + if (itr.hasNext()) { + nextVal = itr.next(); + } + else { + nextVal = null; + } + return temp; + } + + @Override + public boolean hasNext() { + return nextVal != null; + } +} \ No newline at end of file