IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> easy 多数元素 哈希表 摩尔投票法 -> 正文阅读

[C++知识库]easy 多数元素 哈希表 摩尔投票法

在这里插入图片描述


哈希表:

c++

int i =0; int a=i++;
a = i = 0, i++, i=1

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map <int,int> mp;  // 哈希表
        for(auto num : nums){
            mp[num]++;
            int temp=mp[num] ;  // 不能写成 int temp=mp[num]++, 即先temp=mp[num], 再mp[num]++, temp与mp[num] 没有关系
            if( temp > nums.size()/2){
                return num;
            }
        }
        return -1;
    }
};

简洁写法

只能用 ++mp[num] 不能用 mp[num]++原因:
int i=0; (i++ = 0, i=1)
int i=0; (++i = 1, i=1)

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map <int,int> mp;  // 哈希表
        for(auto num : nums){
            if( ++mp[num] > nums.size()/2){
                return num;
            }
        }
        return -1;
    }
};

python


class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        d = {}  # python 哈希表即字典
        for i in nums:
            if i in d.keys():
                d[i] += 1
            else:
                d[i] = 1
                
            if d[i] > len(nums)/2:
                return i

        return -1

注意: 出错写法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        dic={}
        for num in nums:
            dic[num] += 1
            if dic[num] > len(nums)/2:
                return num

        return -1

出错原因:
使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,

更正: 哈希字典初始化 defaultdict
defaultdict 的作用是在于,当字典里的 key 不存在但被查找时,返回的不是 keyError 而是一个默认值。比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        dic = defaultdict(int)
        for num in nums:
            dic[num] += 1
            if dic[num] > len(nums)/2:
                return num

        return -1

简洁写法:


class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        dic = defaultdict(int)
        for num in nums:
            dic[num] += 1
        #返回出现次数最多的num, 即返回字典中最大value对应的key
        return max(dic, key=dic.get)

在这里插入图片描述


排序:

因为出现频率大于n/2,所以排序后的中间位置必然是众数

c++


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

python


class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[len(nums)//2]  # // python 整除

在这里插入图片描述


摩尔投票法:

在这里插入图片描述

c++


class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int ret = 0;
        int counter = 0;
        for(auto num : nums){    // 遍历 vector 容器
            if(counter == 0){
                ret = num;
                counter = 1;
            }else if(ret == num){
                counter++;
            }else{
                counter--;
            }
        }

        return ret;
    }
};

python


class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counter = 0
        for i in nums:
            if counter == 0:
                ret = i
                counter = 1
            elif i == ret:
                counter += 1
            else:
                counter -= 1
        
        return ret


  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:19:22  更:2021-08-01 14:20:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 17:05:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码