可以使用摩尔投票算法来解决这个问题。

摩尔投票算法的基本思想是,如果一个元素出现的次数超过了数组长度的一半,那么它出现的次数减去其他元素出现的次数之和一定大于0。因此,我们可以设置一个候选元素,遍历数组,如果当前元素与候选元素相同,则计数器加一,否则计数器减一。当计数器为0时,我们将候选元素更新为当前元素。

具体实现如下:

  1. 初始化候选元素和计数器,候选元素默认为数组的第一个元素,计数器初始化为1。
  2. 遍历数组,对于每个元素: a. 如果当前元素与候选元素相同,则计数器加一; b. 否则,计数器减一; c. 如果计数器减到了0,将候选元素更新为当前元素,并将计数器重新设置为1。
  3. 返回候选元素。

代码示例(Python):

def majorityElement(nums):
    candidate = nums[0]
    count = 1
    for i in range(1, len(nums)):
        if nums[i] == candidate:
            count += 1
        else:
            count -= 1
        if count == 0:
            candidate = nums[i]
            count = 1
    return candidate

nums = [2,2,1,1,1,2,2]
print(majorityElement(nums))  # 输出:2

时间复杂度分析:遍历一次数组,时间复杂度为O(n)。空间复杂度为O(1)

给定一个大小为 n 的数组 nums 返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n2 ⌋ 的元素。例如 输入:nums = 2211122 输出:2

原文地址: http://www.cveoy.top/t/topic/i0Tp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录