August 7, 2015
Julia spent 20-30 minutes to think about solution first, and read the following blogs, write some code as well. She practised three time using C# and here are the details.
Here are 3 practice Julia did using LinkedList, List and SortedList.
C# practices
Here are 3 practice Julia did using LinkedList, List and SortedList.
1. C# LinkedList
C# code implementation
2. C# List<int>
3. C# SortedList
More detail
Double ended queue is implemented using C# LinkedList class, here is Julia's C# practice code: C# code implementationJulia chose to study the blog on Leetcode: sliding window maximum
C# code implementation (C# does not have deque class, so using C# List<int>,
convert Python code implementation to C#, time limit exceeded)
Good workout on C# List<int>, Julia experienced different style on removing head element if out of sliding window.
Julia chose to read the blog on geekforgeek.com called "maximum of all subarrays of size k".
Method A: naive solution, time complexity O(nw)
C# practice code is here.
C# practice code is here.
Method B: using Self-Balancing Tree (Time complexity: O(nk), need to write c# code)
C# practice code is here.
C# practice code is here.
4. blog:
http://n00tc0d3r.blogspot.ca/2013/04/sliding-window-maximum.html
Good comment about Deque:
We can use a Deque which allow insertions/deletions on both ends. For a Deque implemented by Circular Array/Buffer or Double Linked List, the basic insert/delete operations run in constant time.
discussion of using heap:
The first thought might be heap.
By maintaining a heap for all numbers in the window can give us a O(nlogw)-time solution, where
- building up a heap for initial window takes time O(wlogw)
- when window moves to the next number, each insertion and deletion take time O(logw) and there are n-w moves in total.
- after updating the heap, findMax only takes time O(1) since we know the top of heap is the largest.
So, if w << n, the performance of this solution is good, close to O(n); but if w is not that small, say w = n/3 or n/4, the running time goes up to O(nlogn).
C# practice code
6. blog:
http://www.mamicode.com/info-detail-927510.html
Convert Java Script code to C#; I spent over 12 months to try to be expert on Java Script, so much fun to read the Java Script code again, and enjoyed the blog about the analysis.
Others:
https://github.com/jianminchen/slidingWindowMaximum/blob/master/slidingWindowMaximu5.cs
No comments:
Post a Comment