剑指Offer:(数组)数组中出现次数超过一半的数字

2023-11-05

数组中出现次数超过一半的数字

一、题目

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0

二、思路

数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现次数的和还要多。因此我们可以考虑在遍历数组的时候保存两个值:一个是数组的一个数字,一个是次数。当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1;如果下一个数字和我们之前保存的数字不同,则次数减1。如果次数为零,我们需要保存下一个数字,并把次数设为1。由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把次数设为1时对应的数字

三、代码

#include<iostream>
#include<vector>

using namespace std;

int MoreThanHalfNum_Solution(vector<int> numbers) {

    int length = numbers.size();
    
    if(numbers.empty()){
        return 0;
    }
    int result = numbers[0];
    int time =1;
    int i=1;
    for(i =1;i<length;i++)
    {
        if(time ==0)
        {
            result = numbers[i];
            time = 1;
        }
        else if (result == numbers[i]){
            time++;
        }
        else{
            time--;
        }
        
    } 
    time = 0 ;
    for(auto x:numbers)
    {
        if(x==result)
        {
            time++;
        }
    }
    return ((time>(length/2))?result:0);
    
    }



int main()
{
    vector<int> a={3,2,3,2,3,3,5,3,2};
    cout<<MoreThanHalfNum_Solution(a)<<endl;
    
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指Offer:(数组)数组中出现次数超过一半的数字 的相关文章

  • java 反转链表、合并链表

    第一个问题 反转链表 1 题目描述 输入一个链表 反转链表后 输出新链表的表头 2 解题思路 定义三个指针 第一个指针指向当前正在处理的节点 第二个指针指向当前处理节点的下一个节点 该指针是为了保证正常的遍历完顺序链表的所有节点 第三个指针
  • 把字符串转换成整数(最详细解答)

    题目要求 分析 把一个一个字符以整数的形式来进行输出 需要考虑相互转化的问题 不能使用库函数 首尾会有空格 进行去空格操作 可以减少不必要的判断 区分正负正数 结果可能会越界 题目给的是Integer类型 当超过最大范围或者小于最小范围 有
  • 树04--从上往下打印二叉树

    树04 从上往下打印二叉树 jz22 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 从上往下打印出二叉树的每个节点 同层节点从左至右打印 测试用例 输入 5 4 3 2 1 输出 5 4 3 2 1 解析 参考答案 解析 从
  • 剑指Offer:(数组)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 一 题目 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 如果不存在则
  • LeetCode第3题解析

    给定一个字符串 请你找出其中不含有重复字符的 最长子串 的长度 示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符的最长子串是
  • python解决数组奇数和偶数位置排序问题

    题目描述 输入一个整数数组 实现一个函数来调整该数组中数字的顺序 使得所有的奇数位于数组的前半部分 所有的偶数位于数组的后半部分 并保证奇数和奇数 偶数和偶数之间的相对位置不变 题目解析 这个题目很简单 只需要判断数组中的元素是奇数还是偶数
  • 剑指offer_第20题_包含min函数的栈_Python

    题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数 时间复杂度应为O 1 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution def init self self stack sel
  • 剑指 Offer 07. 重建二叉树 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 07 重建二叉树 1 递归解法 二叉树前序遍历的顺序为 先遍历根节点 随后递归地遍历左子树 最后递归地遍历右子树 二叉树中序遍历的顺序为 先递归地遍历左子树 随后遍历根节点 最后递归
  • LeetCode-重建二叉树

    先利用前序遍历找根节点 前序遍历的第一个数 就是根节点的值 在中序遍历中找到根节点的位置 k 则 k 左边是左子树的中序遍历 右边是右子树的中序遍历 假设左子树的中序遍历的长度是 l 则在前序遍历中 根节点后面的 l 个数 是左子树的前序遍
  • 字符串04--左旋转字符串

    字符串04 左旋转字符串 jz43 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 汇编语言中有一种移位指令叫做循环左移 ROL 现在有个简单的任务 就是用字符串模拟这个指令的运算结果 对于一个给定的字符序列S 请你把其循环左
  • 牛客网_剑指Offer_Python实现_更新中

    剑指Offer编程题汇总 第1题 二维数组中的查找 第2题 替换空格 第3题 从尾到头打印链表 第4题 重建二叉树 第5题 用两个栈实现队列 第6题 旋转数组的最小数字 第7题 斐波那契数列 第8题 跳台阶 第9题 变态跳台阶 第10题 矩
  • LeetCode-从尾到头打印链表

    用vector的reverse函数实现翻转hh Definition for singly linked list struct ListNode int val ListNode next ListNode int x val x nex
  • LeetCode-替换空格

    创建一个新的string 一边遍历原字符串的每一个字符 一边往新的字符串中写入 遇到空格替换为 20即可 class Solution public string replaceSpaces string str string res fo
  • 剑指Offer(牛客网)-替换空格

    题目来源 https www nowcoder com practice 4060ac7e3e404ad1a894ef3e17650423 tpId 13 tqId 11155 tPage 1 rp 1 ru 2Fta 2Fcoding i
  • 剑指offer面试题【14】----剪绳子【Python】【动态规划】【贪婪算法】

    题目描述 给你一根长度为n的绳子 请把绳子剪成m段 m和n都是整数 n gt 1并且m gt 1 每段绳子的长度记为k 0 k 1 k m 请问k 0 k 1 k m 可能的最大乘积是多少 例如 当绳子的长度为8时 我们把它剪成长度分别为2
  • 面试题13. 机器人的运动范围(java+python)

    地上有一个m行n列的方格 从坐标 0 0 到坐标 m 1 n 1 一个机器人从坐标 0 0 的格子开始移动 它每次可以向左 右 上 下移动一格 不能移动到方格外 也不能进入行坐标和列坐标的数位之和大于k的格子 例如 当k为18时 机器人能够
  • Acwing-二叉树的镜像

    遍历树中的所有点 每次遍历完之后把左右儿子swap一下 Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeN
  • java 对称的二叉树

    1 对称的二叉树 1 题目描述 请实现一个函数 用来判断一颗二叉树是不是对称的 注意 如果一个二叉树同此二叉树的镜像是同样的 定义其为对称的 2 解题思路 可以按照类似层次遍历 来判断是否是堆成二叉树 首先根节点以及其左右子树 左子树的左子
  • 12、剪绳子——剑指offer——动态规划

    剪绳子 问题描述 给你一根长度为n的绳子 请把绳子剪成m段 m和n都是整数 n gt 1并且m gt 1 每段绳子的长度记为k 0 k 1 k m 请问k 0 k 1 k m 可能的最大乘积是多少 首先本题可以用贪婪算法和动态规划算法求解
  • 面试题61. 扑克牌中的顺子(java+python)

    从若干副扑克牌中随机抽 5 张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru

随机推荐

  • windows下安装git

    一 下载Git安装包 1 打开Git的官方网站 https git scm com 2 找到下载页 https git scm com downloads 3 找到Windows版本下载页面 https git scm com downlo
  • 数据结构复杂度分析

    文章目录 前言 一 什么是复杂度分析 二 为什么要进行复杂度分析 三 如何进行复杂度分析 1 大O表示法 2 复杂度分析法则 四 常用的复杂度级别 1 常数阶O 1 2 线性阶O n 3 平方阶O n 4 对数阶O logn 五 不常见的时
  • golang中多种方式设置时区

    关于我 文章首发 我的博客 欢迎关注 go语言的time Now 返回的是当地时区时间 time Now Format 2006 01 02 15 04 05 time设置自定义时区 var cstSh time LoadLocation
  • c++继承-----继承中构造函数写法

    父类中的属性 调用父类的构造函数初始化 成员函数的方式初始化 子类中的构造函数 必须要调用父类构造函数 必须采用初始化参数列表的方式 子类想构造无参对象 父类必须要写无参构造函数 隐式调用构造函数 class Parent public 我
  • 文字验证码:简单有效的账号安全守卫!

    前言 文字验证码不仅是一种简单易懂的验证方式 同时也是保护您的账号安全的重要工具 通过输入正确的文字组合 您可以有效地确认自己的身份 确保只有真正的用户才能访问您的账号 HTML代码
  • 关于mybatis的resultMap映射VO类

    今天的模块需要用到多表联查 将查到的结果放到一个新的实体类中 而这几张表的主键我需要用到 难过的是多个表的主键名都是 id 这就导致新的实体类中多个表的主键字段名无法区分 最后再查询语句中加入别名以区分多个表的主键 本以为这就可以了 但是在
  • Java 通配符泛型例子

    请看下面的代码 其中会发生错误的代码已经注释掉 并且写明了错误类型 总体来说 泛型通配符就是为了支持多态时父子类 接口扩展类之间的相互转换而生 package test import java util ArrayList import j
  • seaborn学习笔记(三):直方图、条形图、条带图

    html font family sans serif ms text size adjust 100 webkit text size adjust 100 body margin 0 article aside details figc
  • [carla]把carla世界坐标系 转换为 俯视地图像素坐标系

    在下面这篇参考博客中介绍了如何手动获取从carla世界坐标系到俯视地图像素坐标系的旋转平移矩阵 我也是采用了一样的思路和代码 这里把实现的过程以及最后所有地图的变换矩阵记录如下 参考博客 carla真实世界坐标系与全局俯视地图像素坐标系变换
  • MetaFormer论文翻译

    MetaFormer A Unified Meta Framework for Fine Grained Recognition 摘要 细粒度视觉分类 FGVC 是一项需要识别属于超类别的多个从属类别的对象的任务 最近最先进的方法通常设计复
  • 七年程序员职业规划:北京、上海、硅谷工作经历分享

    前言 很多年前 刚刚从大学毕业的时候 很多公司来校招 其中最烂俗的一个面试问题是 你希望你之后三到五年的发展是什么 我当时的标准回答是 原话 成为在某一方面能够独当一面的技术专家 后来经历了几家不同的公司 换了不同的方向 才知道这个真是一个
  • SpringBoot为什么没有web.xml了

    SpringBoot为什么没有web xml了 今天我们来放松下心情 不聊分布式 云原生 来聊一聊初学者接触的最多的 java web 基础 几乎所有人都是从 servlet jsp filter 开始编写自己的第一个 hello worl
  • IDEA中快速查看maven依赖树关系, 以及快速解决jar包冲突

    安装Maven Helper 插件 打开pom xml 切换到Dependency Analyzer 即可看见jar包的传递依赖关系 比如 spring boot starter websocket 中已经包含了spring boot st
  • HW5300V3-ISCSI存储运维,看这一篇就够了04-创建启动器

    操作步骤 1 选择 资源分配 gt 主机 gt 启动器 单击 创建 2 系统弹出 创建启动器 对话框 在 类型 中选择启动器类型 为主机添加启动器 操作步骤 1 选择 资源分配 gt 主机 gt 启动器 根据业务需求 选择一个或多个待添加给
  • Golang 同步方式

    目录 1 channel 2 Sync Mutex 3 Sync waitGroup 4 Sync Once 5 Sync context 6 Sync pool 7 atomic包 针对变量进行操作 Sync包简述 收集了一些Golang
  • 快速排序实现(递归与非递归)

    快速排序 前言 快排递归 快速排序 挖坑法 快速排序 Hoare法 快速排序 前后指针法 快速排序的优化 三数取中 小区间优化 快排非递归 前言 首先我们来了解一下什么是快速排序 快速排序是交换排序中的其中一个 是一种比较高效的排序方法 时
  • Splunk 会议回顾: 大数据的关键是机器学习

    Splunk的用户大会已经接近尾声 三天时间的会议里 共进行了160多个主题研讨 涵盖了从安全 运营到商业智能 甚至包括物联网 会议中一遍又一遍出现相同的中心主题 大数据的关键是机器学习 存储不再是一个问题 从运行Hadoop兼容节点的专用
  • rdkafka是否支持基于jks的ssl配置

    不可以 https github com edenhill librdkafka wiki Using SSL with librdkafka 目前rdkafa的支持配置如下链接 https github com edenhill libr
  • selenium 使用chrome时与chromedriver版本不匹配的问题

    这几天想试一下 selenium 但安装配置好之后 总是会报一个奇怪的错误 具体错误信息如下 selenium common exceptions WebDriverException Message unknown error Runti
  • 剑指Offer:(数组)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 一 题目 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 如果不存在则