检查数字是否是Python中排序数组中的多数元素

假设我们有一个名为nums的数组,该数组以非降序排序,并且有一个数字目标。我们必须确定目标是否是多数因素。在数组中,多数元素是在长度为N的数组中出现超过N / 2次的元素。因此,如果数组类似-[[2,4,5,5,5,5,5,5,6,6]并且目标为5,则输出为true。

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

  • 将有两个帮助模块,lower()upper()。这些如下。

  • lower()采用两个参数阵列ARR和目标,那就是-

  • 低:= 0,高:=长度

  • 而低<高-

    • 中:=低+(高-低)/ 2

    • 如果arr [mid] =目标,则高=中,否则低=中+ 1

  • 当arr [high] =目标时返回高,否则返回-1

  • upper()采用两个参数阵列ARR和目标,那就是-

  • 低= 0,高=长度arr

  • 而低<高-

    • 中=低+(高-低)/ 2

    • 如果arr [mid] =目标,则低=中,否则高=中-1

  • 当arr [low] =目标时返回低,否则返回-1

  • 主要功能将类似于-

  • u:= upper(arr,target)

  • l:=较低(arr,目标)

  • 如果u – l + 1>(数字的长度)/ 2(如果u不为-1),则返回true;否则返回false

示例(Python)

让我们看下面的实现以更好地理解-

class Solution(object):
   def upper(self,n,target):
      low = 0
      high = len(n)-1
      while low<high:
         mid = low + (high - low + 1)//2
         if n[mid] == target:
            low = mid
         else:
            high = mid-1
      return low if n[low] == target else -1
   def lower(self,n,target):
      low = 0
      high = len(n)-1
      while low < high:
         mid = low + (high - low)//2
         if n[mid]== target:
            high = mid
         else :
            low = mid +1
      return high if n[high] == target else -1
   def isMajorityElement(self, nums, target):
      u = self.upper(nums,target)
      l = self.lower(nums,target)
      return u-l+1 >len(nums)/2 if u != -1 else False
ob1 = Solution()print(ob1.isMajorityElement([2,4,5,5,5,5,5,6,6], 5))

输入值

[2,4,5,5,5,5,5,6,6]
5

输出结果

true