Leetcode!
  • LeetCode!
  • My personal guide to Leetcode
  • Array
    • 11. Container With Most Water
    • 15. 3Sum
    • 219. Contains Duplicate II
    • 238. Product of Array Except Self
    • 245. Shortest Word Distance III
    • 392. Is Subsequence
    • 442. Find All Duplicates in an Array
    • 561. Array Partition I
    • 661. Image Smoother
    • 697. Degree of an Array
    • 723. Candy Crush
    • 832. Flipping an Image
  • Backtracking
    • 294. Flip Game II
    • 401. Binary Watch
    • 1079. Letter Tile Possibilities
  • Binary Search
    • 744. Find Smallest Letter Greater Than Target
    • 852. Peak Index in a Mountain Array
  • String
    • 6. ZigZag Conversion
    • 17. Letter Combinations of a Phone Number
    • 38. Count and Say
    • 521. Longest Uncommon Subsequence I
    • 544. Output Contest Matches
    • 937. Reorder Data in Log Files
  • Design
    • 251. Flatten 2D Vector
    • 281. Zigzag Iterator
  • Hash Table
    • 1. Two Sum
    • 508. Most Frequent Subtree Sum
    • 884. Uncommon Words from Two Sentences
    • 734. Sentence Similarity
  • Linked List
    • 2. Add Two Numbers
  • Unsorted
    • 917. Reverse Only Letters
  • Math
    • 43. Multiply Strings
    • 462. Minimum Moves to Equal Array Elements II
    • 553. Optimal Division
    • 800. Similar RGB Color
  • Greedy
    • 406. Queue Reconstruction by Height
    • 861. Score After Flipping Matrix
  • Tree
    • 701. Insert into a Binary Search Tree
    • 897. Increasing Order Search Tree
  • Divide and Conquer
    • 53. Maximum Subarray
  • Dynamic Programming
    • 62. Unique Paths
    • 63. Unique Paths II
    • 64. Minimum Path Sum
    • 120. Triangle
    • 198. House Robber
    • 213. House Robber II
    • 303. Range Sum Query - Immutable
    • 518. Coin Change 2
    • 750. Number Of Corner Rectangles
    • 337. House Robber III
  • Depth first search
    • 841. Keys and Rooms
  • Trie
    • 677. Map Sum Pairs
  • Two pointer
    • 42. Trapping Rain Water
Powered by GitBook
On this page
  1. Array

697. Degree of an Array

Approach 1: Storing Count, Left and Right Index

For each unique number in the array we can keep track of the number of times it occurs along with its leftmost and rightmost index. If the maximum count occurs only once then we can return the difference between right most and left most index and if the max count occurs more than once we can return the minimum of the right most and left most index

def findShortestSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        di = {}
        le = len(nums)
        for i in range(le):
            if nums[i] not in di:
                di[nums[i]] = [1,i,i]
            else:
                di[nums[i]][2] = i
                di[nums[i]][0] += 1
        ma, ans = -1, float('inf')
        for i in di:
            if di[i][0] > ma:
                ma = di[i][0]
                ans = di[i][2] - di[i][1] + 1
            elif di[i][0] == ma and ans > di[i][2] - di[i][1] + 1:
                ma = di[i][0]
                ans = di[i][2] - di[i][1] + 1
        return ans

This solution passes all the test cases and runs pretty snappily coming in at a solid 93.3% percentile with a runtime of 80ms

Some minor improvements such as using defaultdict in the collections library to handle the insertion better. Another optimization would be to use comparison between tuples to find the max count and the min degree faster. Implementing all these results in the following solution

from collections import defaultdict
def findShortestSubArray(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    map = defaultdict(list)
    for i in range(len(nums)):
        map[nums[i]].append(i)
    # print(list((-len(list), list[-1] - list[0] + 1) for list in map.values()))
    return min((-len(list), list[-1] - list[0] + 1) for list in map.values())[1]

This solution comes in at 98% percentile with a runtime of 72ms, notice the smart use of the tuples generator to solve the problem efficiently

Previous661. Image SmootherNext723. Candy Crush

Last updated 6 years ago