字节跳动面试--求顶数

443 阅读1分钟

以前碰到的面试题,又拿出来重新思考了

class Solution:
    # 求顶数,比如说数组{1, 2, 1, 4, 40, 5},求其中一个顶数( >= 相邻两个数)
    # 以下我直接输出了顶数组成的list
    def get_max1(self, nums):
        # 时间复杂度O(n+n-2)=O(n),空间复杂度O((n-2)//2)=O(n)
        n = len(nums)
        if n <= 2:
            return max(nums)
        max_nums = []
        for i in range(1, n-1):
            if nums[i] >= nums[i-1] and nums[i] >= nums[i+1]:
                max_nums.append(nums[i])
        return max_nums

    def get_max2(self, nums):
        # 时间复杂度O(n+n-2)=O(n),空间复杂度O((n-2)//2)=O(n)
        n = len(nums)
        if n <= 2:
            return max(nums)
        max_nums = []
        i = 1
        while i < n-1:
            if nums[i] >= nums[i-1] and nums[i] >= nums[i+1]:
                max_nums.append(nums[i])
                i += 1
            i += 1
        return max_nums

测试数据

if __name__ == '__main__':
    # 正常情况
    nums = [1,2,1,4,1,2,3,1]
    # nums长度=1或者2,返回其中较大者?
    # nums = [1,2]
    # 不存在顶数返回[]?
    # nums = [2,1,2]
    obj = Solution()
    result = obj.get_max2(nums)

较简单的算法,主要是面试官问我有没有更好的解法,我没有想到。。。(双指针、前缀和、动态规划都不合适吧) 不知道大佬们有没有好办法???

附: www.cnblogs.com/sunshineliu…