假设我们有一个名为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
让我们看下面的实现以更好地理解-
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