You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组多数元素求解:补全C#代码中if条件逻辑

数组多数元素求解(摩尔投票法)

问题分析

你用的是摩尔投票法来寻找多数元素,这个算法核心是通过两两抵消不同元素,最终剩下的元素就是多数元素(前提是数组中确实存在出现次数超过n/2的多数元素)。你的代码框架接近正确,但有两处关键问题:

  • 循环起始索引错误:初始已经把major设为nums[0]并计数为1,循环得从i=1开始,避免重复处理第一个元素。
  • 第一个if的条件缺失:当计数count归0时,说明之前的候选元素已被完全抵消,需要更换候选为当前元素。

修正后的完整代码

using System;

public class Program
{
    public static void Main(String[] args)
    {
        int n = int.Parse(Console.ReadLine());
        
        int[] num = new int[n];

        for (int i = 0; i < n; i++)
        {
            num[i] = int.Parse(Console.ReadLine());
        }
        Console.WriteLine(MajorityElement(num)); 
    }

    public static int MajorityElement(int[] nums)
    {
        int major = nums[0];
        int count = 1;
        // 从第二个元素开始遍历,避免重复处理初始候选
        for (int i = 1; i < nums.Length; i++)
        {
            // 计数归0时,更换候选元素并重置计数
            if (count == 0)
            {
                major = nums[i];
                count = 1;
            }
            else
            {
                if (major == nums[i])
                {
                    count++;
                }
                else
                {
                    count--;
                }
            }
        }
        return major;
    }
}

关键逻辑说明

  • 初始状态:将数组第一个元素设为候选多数元素major,计数count初始化为1。
  • 遍历过程:
    • 若count为0,说明之前的候选已被完全抵消,把当前元素设为新候选,计数重置为1。
    • 若当前元素等于候选major,计数加1;否则计数减1(相当于抵消一个候选元素)。
  • 最终返回的major就是多数元素——因为多数元素出现次数超过数组长度的一半,最终不会被完全抵消。

内容的提问来源于stack exchange,提问作者Rodrigo M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:25:53