首页 > 编程语言 >【每周例题】蓝桥杯 C++ 多数

【每周例题】蓝桥杯 C++ 多数

时间:2024-04-09 18:44:06浏览次数:23  
标签:count votes include nums int C++ 蓝桥 num 例题

多数元素

题目

多数元素

思路分析一

.第一个想法,暴力遍历,然后会发现容易超时,那么更进一步想:哈希表

  • 使用哈希表存储每个数出现的次数,即使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数
  • 加入后,遍历所有键值对,返回最大的键
  • 也可以在遍历的同时寻找最大键

代码一

#include <iostream>  
#include <vector>  
#include<map>
using namespace std;

int majorityElement(vector<int>& nums) 
{
    map<int, int>count;
    int x = 0, votes = 0; //初始化候选多数元素x和票数votes
    for (int num : nums) 
    {
        ++count[num];
        if (count[num] > votes)
        {
            x = num;
            votes = count[num];
        }
    }
    return x;
}

int main() 
{
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) 
    {
        cin >> nums[i];
    }
    cout << majorityElement(nums);
    return 0;
}

  放在力扣的答案为:

class Solution {
public:
    int majorityElement(vector<int>& nums)
    {
        map<int, int>count;
        int x = 0, votes = 0; //初始化候选多数元素x和票数votes
        for (int num : nums)
        {
            ++count[num];
            if (count[num] > votes)
            {
                x = num;
                votes = count[num];
            }
        }
        return x;
    }
};

思路分析二

学习数学的时候有一个小知识点:经过单调排序后,下标为数组一半的元素(下标从 0 开始)一定是众数。

代码二

#include <iostream>  
#include <vector>  
#include<algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++)
    {
        cin >> nums[i];
    }
    sort(nums.begin(), nums.end());
    cout << nums[nums.size() / 2];
    return 0;
}

  放在力扣的答案:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        return nums[nums.size() / 2];
    }
};

  

 

标签:count,votes,include,nums,int,C++,蓝桥,num,例题
From: https://www.cnblogs.com/hcrzhi/p/18124565

相关文章

  • C++程序分享--常见编程面试题:判断字符串是否为回文串
    关注我,持续分享逻辑思维&管理思维;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。【图解《程序员面试常见的十大算法......
  • C/C++与Python:各自的优势与前景展望
    在讨论C/C++和Python这两种编程语言的前景时,我们必须认识到每种语言都有其独特的定位和应用场景,并不存在绝对意义上的“谁更有前景”。它们分别在不同的领域发挥着重要作用,而且在未来的技术发展过程中,二者都将继续保持其不可替代的地位。C/C++:底层与性能优势C和C++是两种历史......
  • C++继承之protected继承
    1概述  通过继承机制,可以利用已有的对象类型来定义新对象类型。所定义的新对象类型不仅仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。。2对象访问作用域作用域:publi......
  • 【华为OD机试真题】218、寻找相似单词 | 机试真题+思路参考+代码分析(C语言、C++、Java
    文章目录一、题目......
  • 【华为OD机试真题】217、最长广播响应 | 机试真题+思路参考+代码分析(C语言、C++、Java
    文章目录一、题目......
  • C++笔记:STL容器库的使用
    前置:    对于stl容器库,我只做了一些常用的笔记,关于更详细的使用可以参考:https://cppreference.com/https://cppreference.com/一.string--字符串对于C++中string字符串会比C语言的字符数组使用起来会顺手许多。命名空间:std关于迭代器可以理解为指针,和指针的使......
  • 蓝桥杯备考随手记: Java 中常用的排序和查找方法
    1.排序方法Arrays.sort():用于对数组进行排序。它使用优化的快速排序算法来对数组进行排序。示例代码:int[]arr={5,2,8,1,6};Arrays.sort(arr);Collections.sort():用于对集合进行排序。它使用优化的归并排序算法来对集合进行排序。示例代码:List<Integer>list......
  • 蓝桥杯备考随手记: BigInteger 和 BigDecimal
    在Java中,BigInteger和BigDecimal是用来处理大整数和高精度浮点数的类,分别属于java.math包。下面分别介绍这两个类的特点、用途和常用方法:BigInteger:特点:BigInteger类表示任意精度的整数,可以处理比long型和int型更大范围的整数。BigInteger是不可变的(immutable)类,一......
  • 《模版模式(极简c++)》
            本文章属于专栏-概述-《设计模式(极简c++版)》-CSDN博客       本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。模式说明方案:模版模式定义了一个逻辑的骨架,将某些步骤推迟到子类中实现。父类定义了一个模版方......
  • UE中UPROPERTY的用法(UEC++个人学习笔记)
    UPROPERTY设置可视//仅在类默认设置可见(即里面面板) UPROPERTY(VisibleDefaultsOnly) int32VisibleDefaultsOnlyInt; //仅在实例化细节面板可见(即外面面板) UPROPERTY(VisibleInstanceOnly) FStringVisibleInstancestring; //类默认设置和实例化细节面板都可见......