1078. 数组的度

1078. 数组的度

中文English

给定由非负整数组成的非空数组,数组的度定义为出现频率最高的元素。

找出最短的连续子数组,并使得它和原数组有相同的度。返回该连续子数组的长度。

样例

样例 1:

输入: [2, 2]
输出: 2

样例 2:

输入: [1, 2, 2, 3, 1]
输出: 2
解释: 
输入数组的度是2,1和2都出现了两次。
具有相同度的子串包括:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
其中长度最短为2。所以返回2。

注意事项

nums.length的范围在1到50,000之间。
nums[i]是范围为0到49,999的整数。

 
 
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param nums: a list of integers
    @return: return a integer
    """
    '''
    大致思路:
    1.取出出现最大的次数
    2.得到所有的连续列表组合
    3.在连续列表组合里面进行判断,如果是最小的且度数最大的,则返回
    '''
    def findShortestSubArray(self,nums):
        max_count = self.return_count(nums)
        
        ##得到所有的连续列表组合,长度要大于max_count
        all_list = []
        for i in range(len(nums)):
            for j in range(i+max_count,len(nums)+1):
                all_list.append(nums[i:j])

        ##然后进行判断当前列表组合的度数是否等于max_count,以及求出最小长度
        res = len(nums)
        for l_list in all_list:
            if max_count == self.return_count(l_list) and len(l_list) < res:
                res = len(l_list)
        return res


    def return_count(self,l_list):
        max_count = 0  
        for num in l_list:
            if l_list.count(num) > max_count:
                max_count = l_list.count(num)
        return max_count

注:lintcode未通过,本地测试通过,待优化。(你的代码内存使用超过了限制,检查你的空间复杂度。MLE通常是由多余的二维数组造成的)

posted @ 2020-04-06 16:30  风不再来  阅读(170)  评论(0编辑  收藏  举报