Y'day I solved LeetCode medium level problem: #904: Fruit Into Baskets ()
A quick heuristics-based solution with O(n) time-complexity in Java, which has been accepted by the LeetCode judge, is :
class Solution { public int totalFruit(int[] tree) { Integer[] uniqueTreeTypesIdx = new Integer[2]; uniqueTreeTypesIdx[0] = 0; int start = 0; int lastConsecutiveStretchStart = 0; int maxStretchLength = 1; int i = 1; //index counter for (i=1; i<tree.length; i++) { if (tree[i] != tree[uniqueTreeTypesIdx[0]]) { if (uniqueTreeTypesIdx[1] == null) { uniqueTreeTypesIdx[1] = i; lastConsecutiveStretchStart = i; } else if (tree[i] != tree[uniqueTreeTypesIdx[1]]) { maxStretchLength = Math.max (maxStretchLength, i-1-start+1); start = lastConsecutiveStretchStart; uniqueTreeTypesIdx[0] = lastConsecutiveStretchStart; uniqueTreeTypesIdx[1] = i; lastConsecutiveStretchStart = i; } else { //tree[i] != tree[uniqueTreeTypesIdx[0]] && tree[i] == tree[uniqueTreeTypesIdx[1]] if (tree[i] == tree[lastConsecutiveStretchStart]) ; else lastConsecutiveStretchStart = i; } } else { if (tree[i] == tree[lastConsecutiveStretchStart]) ; else lastConsecutiveStretchStart = i; } } maxStretchLength = Math.max (maxStretchLength, i-1-start+1); return maxStretchLength; } }
I would like to re-visit it in near-times, to devise a more elegant and intuitive solution approach, but this is it for now!
Stay tuned for the next one!
No comments:
Post a Comment