剑指Offer 第23天 数组中出现次数超过一半的数字 数组中数字出现的次数 I 数组中数字出现的次数 II(异或运算)

news2024/12/24 3:41:36

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

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

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

示例 1:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 【解法一】排序取中法

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

【解法二】哈希遍历法

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        map<int, int> mp;
        for(auto &e : nums)
        {
            if(mp[e]==nums.size()/2)
                return e;
            mp[e]++;
        }
        return -1;
    }
};

 【解法三】摩根计数

一对一擂台决战,当擂台没有人时,上去的就是第一个选手,后续遍历中,如果和自己相同那么计数++,如果和自己不是一伙人那就俩个同归于尽。最后站在擂台上的就是众数。

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int votes = 0, res;
        for(auto &e : nums)
        {
            if(votes == 0)
                res = e;
            votes += e == res ? 1 : -1;
        }
        return res;
    }
};

剑指 Offer 56 - I. 数组中数字出现的次数

数组中其他数字都出现了2次,只有一个数字出现一次,找出这个数字

【解法一】置入map计数  二次遍历求取一次的key元素(以下题目均可使用map 不再重写)

【解法二】排序后依次遍历

【解法三】遍历一次,int res = 0;每个元素与res进行异或。

剑指 Offer 56 - I. 数组中数字出现的次数

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

【解法】分组划分

数组中存在俩个只出现一次的数,如果只进行一次整体异或操作,只能得到俩个数的异或结果,无法得到俩个数,但可以利用这俩个数的异或结果来对数组进行分组。

比如 整体异或结果为10010 那么就能利用第二位是否为1来分成俩组数据,每组各含有一个出现次数为一的数。

class Solution {
public:
    vector<int> singleNumbers(vector<int>& nums) {
        int num = 0, index = 1;
        for(auto &e : nums) // 整体异或
        {
            num ^= e;
        }
        while((num & index) == 0) // 找到整体异或结果二进制为1的那一位
        {
            index<<=1;
        }
        // 利用index位为1将数组分为俩部分
        int res1 = 0, res2 = 0;
        for(auto &e : nums)
        {
            if(e&index)
                res1 ^= e;
            else
                res2 ^= e;
        }
        return vector<int>{res1, res2};
    }
};

剑指 Offer 56 - II. 数组中数字出现的次数 II

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

我还是用map把……

class Solution {
    public int singleNumber(int[] nums) {
        int ones = 0, twos = 0;
        for(int num : nums){
            ones = ones ^ num & ~twos;
            twos = twos ^ num & ~ones;
        }
        return ones;
    }
class Solution {
    public int singleNumber(int[] nums) {
        int[] counts = new int[32];
        for(int num : nums) {
            for(int j = 0; j < 32; j++) {
                counts[j] += num & 1;
                num >>>= 1;
            }
        }
        int res = 0, m = 3;
        for(int i = 0; i < 32; i++) {
            res <<= 1;
            res |= counts[31 - i] % m;
        }
        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告

代码已上传Python接口项目实战篇&#xff08;2&#xff09;源码 项目场景&#xff1a; 由于关于接口的测试用例任务越来越多&#xff0c;单纯靠人工手敲的方式输入和校验&#xff0c;速度上已经不能够满足项目的进行速度&#xff0c;而且都是针对登录的框框进行用例测试&…

一站式轻监控轻运维系统nezha(下篇)

本文软件由网友 114514 推荐&#xff1b; 命令行安装 docker安装所需要的文件都能在 https://github.com/naiba/nezha/tree/master/script 找到&#xff0c;config.yaml 和 docker-compose.yml 老苏都做了调整 你可以在 data 目录中新建一个空的 config.yaml 文件&#xff0c;…

基于“Doris”的type2拉链表的Mysql实现

基于“Doris”的type2拉链表的Mysql实现 需求说明 基于Doris实现Type2、拉链表。主要对上游系统里的面积字段进行监控&#xff0c;如果发现变化则跟踪记录到维度表里。 解决方案 type2相关概念见如下链接: SCD缓慢变化维拉链表 这里特别需要注意的是&#xff1a; 1、因为…

scrapy_redis原理分析并实现断点续爬以及分布式爬虫

scrapy_redis原理分析并实现断点续爬以及分布式爬虫 学习目标 了解 scrapy实现去重的原理了解 scrapy中请求入队的条件掌握 scrapy_redis基于url地址的增量式单机爬虫掌握 scrapy_redis分布式爬虫 1. 下载github的demo代码 clone github scrapy-redis源码文件 git clone http…

WPF TotalSummary汇总栏设置鼠标点击事件和显示格式修改

文章目录最开始的提示汇总有两种Summary Panel的设置参考这里Fixed Summary Panel的设置参考这里代码中都用到了DXBinding多个汇总项&#xff0c;对某一项进行控制设置鼠标点击事件整体的xaml代码如下总结最开始的提示 WPF毕竟是微软的东西&#xff0c;且用的人不多&#xff0…

虚函数的复杂(继承)内存布局

文章目录单继承&#xff08;无虚函数覆盖&#xff09;单继承&#xff08;有虚函数覆盖&#xff09;多继承&#xff08;无虚函数覆盖&#xff09;多继承&#xff08;有虚函数覆盖&#xff09;菱形继承&#xff08;有虚函数覆盖&#xff09;菱形虚拟继承&#xff08;有虚函数覆盖…

浅析git

目录 git 的历史 git 的感性认识 git 在Linux下的操作 git三板斧 git 的历史 雷纳斯托瓦兹&#xff0c;想必大家对这个名字并不陌生&#xff0c;他是Linux内核的最早作者&#xff0c;随后发起了这个开源项目&#xff0c;担任Linux内核的首要架构师与项目协调者&#xff0c…

Kafka入门(一)

1、Kafka简介 Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域&#xff08;hadoop集群&#xff09;、物联网领域。其主要设计目标如下&#xff1a; 以时间复杂度为O(1)的方式提供消息持久化能…

华为路由器Talent服务配置

前言 Telnet&#xff1a;console是通过本地进行设备管理&#xff0c;还有一种是通过远程登录的方式进行设备管理&#xff0c;也就是虚拟终端。通过发送信息进行控制&#xff0c;不受终端和服务器的位置限制&#xff08;只要可以通信&#xff0c;服务器启用了Telnet功能即可&am…

Python 的基础语法

第一个 Python 程序交互式编程交互式编程不需要创建脚本文件&#xff0c;是通过 Python 解释器的交互模式进来编写代码。linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下&#xff1a;$ pythonPython 2.7.6 (default, Sep 9 2014, 15:04:36)[GCC 4.2…

LinkedHashSet源码阅读理解

概述 1、底层&#xff1a;HashSet LinkedHashMap 2、创建节点时将节点插入链表&#xff0c;因此有序 3、线程不安全 源码理解 demo&#xff1a; public class LinkedHashSetDemo {public static void main(String[] args) {test();}public static void test(){LinkedHas…

CDMP认证考试考前你需要了解的那些事

对国内的数据从业人员来说&#xff0c;CDMP算比较新的考试&#xff0c;目前相关介绍很少&#xff0c;小编整理了CDMP考试先关的一些内容&#xff0c;希望对正在考虑考取CDMP认证的你有所帮助&#xff01;CDMP认证有几个等级&#xff1f;4个。A级&#xff08;基础级&#xff09;…

为什么Google优化排名前期要做长尾关键词?谷歌seo怎么做?

本文主要分享关于谷歌长尾词对于外贸网站获取流量和排名的重要性。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 Google优化排名是指在Google 搜索结果中&#xff0c;使外贸站的排名更高。 长尾关键词是指长度较长的&#xff0c;不…

((蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第2天】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有65天

&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6; 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&a…

【计算机网络】Linux下路由配置总结

文章目录路由的基础知识Linux内核路由表使用route -n命令查看Linux内核路由表三种路由类型说明(Flags)配置路由route的命令设置包转发静态路由配置参考路由的基础知识 1&#xff09;路由概念 路由&#xff1a; 跨越从源主机到目标主机的一个互联网络来转发数据包的过程路由器…

多线程代码案例之单例模式

目录 单例模式 饿汉模式 懒汉模式 问题一 问题二 问题三 单例模式 单例模式&#xff0c;是设计模式的一种。在有些特定场景中&#xff0c;有的特定的类&#xff0c;只能创建出一个实例&#xff0c;不应该创建多个实例。单例模式就可以保证这样的需求。例如JDBC中的Data…

OpenMMLab AI实战营笔记前两次课

文章目录1计算机视觉算法基础与 OpenMMLabCV引入OpenMMLab基础知识&#xff1a;2 计算机视觉之图像分类算法基础传统方法--设计图像特征AlexNet VGG 等神经网络搜索&#xff08;2016&#xff09;Vision/Swin Transformer轻量化卷积神经网络注意力机制 Attention Mechanism模型学…

文档存储Elasticsearch系列--3分布式存储和搜索过程

前言&#xff1a;ES 作为分布式文档的存储&#xff0c;它的存储过程是怎样的&#xff0c;它的分布式检索过程又是怎样的&#xff1b; 1 分布式存储过程&#xff1a; 为了说明目的, 我们 假设有一个集群由三个节点组成。 它包含一个叫 blogs 的索引&#xff0c;有两个主分片&a…

linux查看/设置某个进程运行的CPU核

目录 1.ps -eF 2.top命令 3.pidstat命令 4.使用taskset指令 5.使用taskset指定进程运行在CPU核 1.ps -eF #查看fwd进程运行在哪个cpu核上 [rootCENTOS57 rpm]# ps -eF | grep fwd 2.top命令 (1)top (2)按f键可以选择下面配置选项 P Last Used Cpu (SMP) (3)Es…

【深度学习】YOLO系列(v1-v3+tinyv3)解析

YOLOv1 正负样本选取 如果目标的中心落在cell中,那么这个cell就负责预测这个类别。 由于每个cell预测两个bbox,那么选择与GT IOU大的bbox来预测这个目标,也就是这一个框的 1 i j o b j = 1 , 1 i j n o b j