0
点赞
收藏
分享

微信扫一扫

NLP和LLMs: 理解它们之间的区别

善解人意的娇娇 2024-04-17 阅读 7

多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 :

输入:nums = [2,2,1,1,1,2,2]
输出:2

解题思路

可以利用摩尔投票法(Boyer-Moore Voting Algorithm)。这个算法的基本思想是:

  • 维护一个候选众数,初始化为数组的第一个元素,然后遍历数组,
  • 对于每个元素,如果计数为0,则将当前元素设置为候选众数,
  • 否则如果当前元素等于候选众数,则计数加一,否则计数减一。

核心思想:通过抵消不同的元素,最终剩下的就是多数元素。

  • 由于题目已经保证多数元素一定存在,且出现次数大于 ⌊ n/2 ⌋,所以这种投票法一定会得到正确的结果。

Java实现

public class MajorityElement {
    public static int majorityElement(int[] nums) {
        int candidate = nums[0];
        int count = 1;

        for (int i = 1; i < nums.length; i++) {
            if (count == 0) {
                candidate = nums[i];
                count = 1;
            } else if (nums[i] == candidate) {
                count++;
            } else {
                count--;
            }
        }

        return candidate;
    }

    public static void main(String[] args) {
        int[] nums = {3, 2, 4, 3, 4, 4, 2, 4, 4};
        System.out.println(majorityElement(nums));
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中n为数组nums的长度。因为只需遍历一次数组。

  • 空间复杂度:O(1)。

举报

相关推荐

0 条评论