zoukankan      html  css  js  c++  java
  • 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通常是由多余的二维数组造成的)

  • 相关阅读:
    浅析Java CompletionService
    经验总结13--EF配置
    消息摘要算法-HMAC算法
    03012_预处理对象executeQuery方法(实现数据库的查询)
    GO学习笔记:函数defer
    GO学习笔记:函数传值与传指针
    GO学习笔记:函数作为值、类型
    GO学习笔记:函数Panic和Recover
    GO学习笔记:import
    GO学习笔记:struct类型
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12642682.html
Copyright © 2011-2022 走看看