检查是否可以将Python中的列表拆分为连续的递增子列表

检查是否可以将Python中的列表拆分为连续的递增子列表

假设我们有一个名为nums的数字列表,按非下降顺序排序,我们必须检查它是否可以被拆分为任意数量的子序列,这些子序列每个子序列的最小长度为3,且连续递增。

因此,如果输入的是nums = [2,3,4,4,5,6,7],那么输出将为True,因为我们可以将列表拆分为[2,3,4]和[4,5,6,7]。

要解决此问题,我们将遵循以下步骤−

  • counts :包含nums元素及其计数的映射
  • starts :一个新列表
  • ends :一个新列表
  • 对于排序后计数项的每个x,做以下操作
    • 如果count [x]> count [x-1],则
      • l:大小为(count [x] – count [x-1])的列表,并填充为x
      • 将l插入到starts中
    • 如果count [x]> count [x + 1],则
      • l:大小为(count [x] – count [x + 1])的列表,并填充为x
      • 将l插入到starts中
  • 当所有(start,end)对都满足(start + 2 <= end)时返回true,否则返回false

示例(Python)

让我们看看以下实现以更好地理解−

from collections import Counter
class Solution:
   def solve(self, nums):
      count = Counter(nums)
      starts = []
      ends = []
      for x in sorted(count):
         if count[x] > count[x - 1]:
            starts.extend([x] * (count[x] - count[x - 1]))
         if count[x] > count[x + 1]:
            ends.extend([x] * (count[x] - count[x + 1]))
      return all(s + 2 <= e for s, e in zip(starts, ends))
ob = Solution()
nums = [2, 3, 4, 4, 5, 6, 7]
print(ob.solve(nums))

输入

[6, 7, 5, 10, 13],2

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程