Python 中查找大小为 k 的子列表的最大值程序


假设我们有一个列表 nums 和另一个值 k,我们需要找到大小为 k 的每个子列表的最大值。

因此,如果输入类似于 nums = [12, 7, 3, 9, 10, 9] k = 3,则输出将为 [12, 9, 10, 10]

为了解决这个问题,我们将遵循以下步骤:

  • 如果 k > nums 的大小,则

    • 返回一个空列表

  • res := 一个新列表

  • temp := nums[0]

  • temp := npoint := 0

  • 对于 i 从 0 到 k − 1,执行

    • 如果 nums[i] > temp,则

      • temp := nums[i]

      • point := i

  • 将 temp 插入 res 的末尾

  • 对于 i 从 k 到 nums 的大小,执行

    • 如果 nums[i] < temp 且 (i − point) < k,则

      • temp := nums[point]

    • 否则,当 nums[i] < temp 且 (i − point) >= k 时,则

      • point := i − k + 1

      • 对于 j 从 i − k + 1 到 i,执行

        • 如果 nums[j] > nums[point],则

          • point := j

      • temp := nums[point]

    • 否则,

      • temp := nums[i]

      • point := i

    • 将 temp 插入 res 的末尾

  • 返回 res

让我们看看下面的实现,以获得更好的理解:

示例

 实时演示

class Solution:
   def solve(self, nums, k):
      if k > len(nums):
         return []
      res = []
      temp = nums[0]
      point = 0
      for i in range(k):
         if nums[i] > temp:
            temp = nums[i]
            point = i
      res.append(temp)
      for i in range(k, len(nums)):
         if nums[i] < temp and (i − point) < k:
            temp = nums[point]
         elif nums[i] < temp and (i − point) >= k:
            point = i − k + 1
            for j in range(i − k + 1, i + 1):
               if nums[j] > nums[point]:
                  point = j
            temp = nums[point]
         else:
            temp = nums[i]
            point = i
         res.append(temp)
      return res
ob = Solution()
nums = [12, 7, 3, 9, 10, 9]
k = 3
print(ob.solve(nums, k))

输入

[12, 7, 3, 9, 10, 9], 3

输出

[12, 9, 10, 10]

更新于: 2020-12-15

134 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告