在Python中编写程序以检查列表中的每个子列表是否至少包含一个唯一元素

在Python中编写程序以检查列表中的每个子列表是否至少包含一个唯一元素

假设我们有一个名为nums的元素列表,我们必须检查每个子列表是否至少有一个元素,该元素恰好在子列表中出现一次。我们必须在线性时间内解决此问题。

因此,如果输入为nums = [5, 10, 20, 10, 0],则输出将为True,因为nums中的每个子列表都至少有一个仅出现一次的元素。[[5],[10],[20],[10],[0],[5,10],[10,20],[20,10],[10,0],[5,10,20], [10,20,10],[20,10,0],[5,10,20,10],[10,20,10,0],[5,10,20,10,0]]所有都至少有一个频率为1的元素。

为了解决这个问题,我们将按照以下步骤进行 –

  • 定义一个函数has_unique()。这将带有left,right参数。
  • 如果left >= right, 那么 return True
  • counts:包含nums [left到right索引之间]中每个元素的频率的字典
  • 如果counts的最小频率大于1,则 return False
  • start:left
  • 对于范围从left到right的索引,请执行以下操作 –
    • 如果counts[nums [index]]与1相同,则 –
      • 如果has_unique(start,index – 1)为false,则 return False
      • start = index + 1
  • return has_unique(start,right)
  • 从主方法中,返回has_unique(0,nums的大小 – 1)

例子

让我们看一下以下实现以更好地了解 –

from collections import Counter
def solve(nums):
   def has_unique(left, right):
      if left >= right:
         return True

      counts = Counter(nums[left : right + 1])
      if min(counts.values()) > 1:
         return False

      start = left

      for index in range(left, right + 1):
         if counts[nums[index]] == 1:
            if not has_unique(start, index - 1):
               return False
            start = index + 1

      return has_unique(start, right)

   return has_unique(0, len(nums) - 1)

nums = [5, 10, 20, 10, 0]
print(solve(nums))

输入

[5, 10, 20, 10, 0]

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程