以前碰到的面试题,又拿出来重新思考了
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)
较简单的算法,主要是面试官问我有没有更好的解法,我没有想到。。。(双指针、前缀和、动态规划都不合适吧) 不知道大佬们有没有好办法???