CS-Wiki CS-Wiki
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Redis
  • 设计模式
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Kafka
  • 校招扫盲
  • 项目推荐
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Redis
  • 设计模式
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Kafka
  • 校招扫盲
  • 项目推荐
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
  • 刷题模板汇总
  • 一些刷题小技巧
  • 整数 and 位运算

    • 整数理论基础
    • 整数除法
    • 二进制加法
    • 剑指 Offer 15 - 二进制中 1 的个数
    • 前 n 个数字二进制中 1 的个数
    • 只出现一次的数字
    • 只出现一次的数字II
    • 只出现一次的数字 III
    • 剑指 Offer 39 - 数组中出现次数超过一半的数字
      • 📃 题目描述
      • 🔔 解题思路
      • 💥 复杂度分析
    • 剑指 Offer 16 - 数值的整数次方:快速幂模板
    • 剑指 Offer 43 - 1~n 整数中 1 出现的次数
  • 数组

  • 链表

  • 哈希表

  • 字符串

  • 栈

  • 队列

  • 二叉树

  • 前缀树

  • 二分查找

  • 双指针法

  • 区间求和问题

  • 排序

  • 回溯算法

  • 贪心算法

  • 动态规划

  • 图

  • 数学

  • 自动机

  • 海量数据和空间限制

  • 05-数据结构与算法
  • 整数 and 位运算
小牛肉
2022-09-19
目录

剑指 Offer 39 - 数组中出现次数超过一半的数字

# 📃 题目描述

题目链接:剑指 Offer 39. 数组中出现次数超过一半的数字 (opens new window)

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

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

示例 1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

# 🔔 解题思路

Boyer-Moore 投票算法:

想象一下,如果把这些数字当做人种,一个数字和另外一个数字打了起来,同归于尽。最后剩下的是不是人数最多的那种人。这里要满足一个条件:某类人的数目一定要大于总人数的一半

算法步骤:我们选择输入数组中第一个元素作为候选元素candidate,并设置其出现次数为count=1。随后遍历数组

  • 当遇到与 candidate 相同的元素,count + 1,不同的元素,count - 1
  • 当 count 为 0 的时候,选择下一个元素为候选元素,并且置 count= 1
  • 遍历到数组的最后,剩下的 candidate 就是要求的结果
class Solution {
    public int majorityElement(int[] nums) {
        int candidate = nums[0];
        // candidate 出现次数
        int count = 1;

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

            if (count == 0) {
                candidate = nums[i + 1];
            }
        }

        return candidate;
    }
}

# 💥 复杂度分析

  • 空间复杂度:
  • 时间复杂度:

🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~

帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10
只出现一次的数字 III
剑指 Offer 16 - 数值的整数次方:快速幂模板

← 只出现一次的数字 III 剑指 Offer 16 - 数值的整数次方:快速幂模板→

最近更新
01
02
线上环境 CPU 使用率飙升如何快速排查?
03-05
03
面试官再跟你说中国没有根服务器,雪人计划让他了解下
02-23
更多文章>
Theme by Vdoing | Copyright © 2019-2023 飞天小牛肉 | 皖ICP备2022008966号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式