2. Counting sort and built-in quick-sort (need to know the average/worst time complexity of quick sort.)
3. Binary search of time complexity O(log(n)). Stick on single implementation.
- left-closed and right-open interval. Same as for loop.
- < in while loop.
- mid = lower + (upper - lower) / 2 to avoid overflow.
- return lower.
You can develop other various implementations based on this one.
Source code:
class Solution { public int[] numSmallerByFrequency(String[] queries, String[] words) { int[] sorted = new int[words.length]; for (int i = 0; i < words.length; i++) { sorted[i] = calculate(words[i]); } Arrays.sort(sorted); int[] nums = new int[queries.length]; for (int i = 0; i < queries.length; i++) { int target = calculate(queries[i]); int lower = 0; int upper = words.length; while (lower < upper) { int mid = lower + (upper - lower) / 2; if (sorted[mid] <= target) { lower = mid + 1; } else { upper = mid; } } nums[i] = words.length - lower; } return nums; } private int calculate(String word) { int[] counting = new int[26]; for (char c : word.toCharArray()) { counting[c - 'a']++; } for (int i = 0; i < 26; i++) { if (counting[i] > 0) { return counting[i]; } } return 0; } }
沒有留言:
張貼留言