千家信息网

怎么解决C++多数元素问题

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容介绍了"怎么解决C++多数元素问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 题目描
千家信息网最后更新 2025年02月05日怎么解决C++多数元素问题

本篇内容介绍了"怎么解决C++多数元素问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. 题目描述

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element

2. 解题思路

/*解题思路:解法一、排序法1、将数组排序,返回下标为nums + numsSize / 2的数解法二、消除法1、假设目标数为key = nums[0]2、遇到相同数则count_add++,否则count_add++,count_sub--3、count_add+count_sub表示累计相同值次数,如果大于numsSize / 2,返回key4、当count_add<1时,改为key=nums[++i]5、遍历结束后,key为目标众数*/

3. 测试结果

解法一、排序法

解法二、消除法

4. 排序法

int compare(const void* a, const void* b){    return (*(int*)a - *(int*)b);}int majorityElement(int* nums, int numsSize) {    //使用qsort函数快速排序    qsort(nums, numsSize, sizeof(int), compare);    return *(nums + numsSize / 2);}

5. 消除法

int majorityElement(int* nums, int numsSize) {    if (numsSize <= 2)        return *nums;    int key = nums[0];    int count_add = 1;    int count_sub = 0;    for (int i = 1; i < numsSize; i++)    {        if (nums[i] == key)            count_add++;        else {            count_add--;            count_sub++;        }        if (2 * (count_add + count_sub) >= numsSize)            return key;        if (count_add < 1) {            key = nums[++i];            count_add = 1;            count_sub = 0;        }    }    return key;}

"怎么解决C++多数元素问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0