剑指offer-消失的数字、数组中出现的次数

news2024/11/15 23:00:25

消失的数字

在这里插入图片描述

解法一:求和相减

假设nums为[0,1,2,4],消失的数字为3,完整的数组应该是[0,1,2,3,4],则sum1=0+1+2+4=7,sum2=0+1+2+3+4=10,我们很容易发现
sum2-sum1 = 0+1+2+3+4 - 0+1+2+4 = 3,即为消失的数字。因此,我们可以采用先相加再相减的方法,就可以求出消失的数字。
代码如下:

int missingNumber(int* nums, int numsSize)
{
	int tmp = 0;
	int talg = 0;
	for (int i = 0;i <= numsSize;i++)
	{
		tmp = tmp + i;//求数组下标之和
	}
		for (int j = 0;j < numsSize;j++)
		{
			talg += nums[j];//求数组元素之和
		}
		return tmp - talg;
}

解法二:异或

首先我们得清楚异或 ^ 的原理:
相同为0,相异为1,并且0^任何数都等它本身
a ^ a = 0、a ^ b = b ^ a、0 ^ a = a 、(a!=b)
那么根据上述的原理我们便可以使用异或进行解题:
首先异或上所有数,n即为此数组元素个数,即ret = 0 ^ 1^ 2^ …^n
然后对数组元素异或,nums[0]^ nums[1] ^ …^ nums[numsSize-1]
然后异或这二者,即
ret = 0^ 1^ 2^ 3^ …^ n^ nums[0] ^ nums[1]^ …^nums[numsSize-1]
最终ret就为消失的数字
打个比方:nums[] = {2,3,4,5,6}
ret = 0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 = 1.

int missingNumber(int* nums, int numsSize)
{
    //异或
    int ret = 0;
    //先异或0-n的所有数
    for(int i = 0; i <= numsSize; ++i){
       ret ^= i;
    }
    //再将ret与数组所有数异或
    for(int i = 0; i < numsSize; ++i){
       ret ^= nums[i];
    }
    return ret;
}

数组中出现的次数

在这里插入图片描述
同上可得,此题采用异或的位运算是最合适的。

int* singleNumbers(int* nums, int numsSize, int* returnSize) {
    int ret = 0;
    int i = 0;
    int num1 = 0;
    int num2 = 0;
    int pos = 0;
    int* arr = (int*)malloc(2 * sizeof(int));
    //通过0对自身依次异或,将两个单独的数的异或后的结果找出
    for (i = 0; i < numsSize; i++)
    {
        ret ^= nums[i];
    }
    //找到异或后结果的二进制序列,找出为1的位数
    for (i = 0; i < 32; i++)
    {
        if ((ret >> i) & 1 == 1)
        {
            pos = i;
            break;
        }
    }
    //找到位数后,将按其他数的这个位数是否为1,还是为0进行分离,形成两组数,分别自身异或,最后剩下的就是单独的数。
    for (i = 0; i < numsSize; i++)
    {
        if ((nums[i] >> pos) & 1 == 1)
        {
            num1 ^= nums[i];
        }
        else
        {
            num2 ^= nums[i];
        }
    }
    arr[0] = num1;
    arr[1] = num2;
    *returnSize = 2;
    return arr;
}

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

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

相关文章

国内有哪些值得一去的通信类博物馆?

众所周知&#xff0c;博物馆是收藏、展示和研究历史文物的地方。参观博物馆&#xff0c;既可以回顾历史往事&#xff0c;也可以学习知识。那么&#xff0c;作为通信人&#xff0c;你知道国内有哪些通信领域的博物馆吗&#xff1f;今天&#xff0c;就让小枣君给大家介绍介绍。█…

没有基础学习编程Python难学吗?

你听说过Python吗&#xff1f;如果是这样&#xff0c;你有没有想过它是否很难学习&#xff1f;在本文中&#xff0c;我将告诉您什么是 Python 以及为什么在 2023 年学习它是一个好主意。Python 是一种计算机编程语言&#xff0c;广泛用于 Web 开发、科学计算、数据分析、人工智…

ChatGPT的API接口的模型有多少种?这些模型都有什么功能或者在应用场景上有什么区别?【模型介绍使用与调用接口方法】

OpenAI 的 API 接口提供了多个 GPT-3 模型,每个模型针对不同的应用场景和任务进行了优化。以下是目前可用的 GPT-3 模型: davinci: 这是最大和最全面的模型,具有最高的准确性和灵活性,用于多种自然语言处理任务,如文本生成、对话系统、翻译等。 curie: 这个模型比 davin…

MySQL:想实现sql语句进行批量删除数据库或表,而引发的熬夜探究

因为在自测过程中&#xff0c;创建了很多数据库&#xff0c;一个个手动删除属实有点对不起程序员这个身份&#xff0c;那么有没有简单的sql语句操作来进行批量删除数据库呢&#xff1f;于是便有了本篇文章 上面图片是AI创作&#xff0c;未经允许&#xff0c;不可商用哦&#xf…

谷粒学苑第一天

谷粒学苑第一天 官方文档&#xff08;多看看&#xff09;&#xff1a;https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping 问题1&#xff1a;新建springboot没有pom文件&#xff08;已解决&#xff09; 修改pom文件 有这个web依赖&#xff0c;properties才会是小…

CRM外呼系统

对于如今企业来讲&#xff0c;电销依然是企业进行销售的主要手段&#xff0c;因其成本低&#xff0c;覆盖率较广&#xff0c;时间获客较短。运用公司自动化信息管理技术和专业化运行平台&#xff0c;完成公司产品的推介、咨询、报价以及产品成交条件确认等主要营销过程的业务 …

yolov5源码解读--数据处理模块

yolov5源码解读--数据处理模块加载数据读取图片加载标签马赛克数据增强图片标签其他的数据增强变图像变标签__getitem__构建Batch加载数据 create_dataloader 跳转到datasets.py文件中&#xff0c;可以看到支持输入的文件类型非常丰富。。 回归正题 跳转LoadImagesAndLabel…

小程序(九)后端 签到1

文章目录一、考勤时间表设计1、表设计二、缓存考勤时间1、mapper.xml2、常量封装类三、封装检测当天是否可以签到1、为什么要检测是否可以签到&#xff1f;2、怎么判断当天是工作日还是节假日&#xff1f;3、封装持久层代码1&#xff09;查询特殊休息日2&#xff09;查询特殊工…

jjava企业级开发-01

一、Spring容器演示 采用Spring配置文件管理Bean 1、创建Maven项目 修改项目的Maven配置 2、添加Spring依赖 在Maven仓库里查找Spring框架&#xff08;https://mvnrepository.com&#xff09; 同上添加其他依赖 <?xml version"1.0" encoding"UTF-8…

stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)

文章目录一、uart_init&#xff08;串口初始化&#xff09;二、USART1_IRQHandler&#xff08;串口1中断服务程序&#xff09;三、main.c&#xff08;主函数&#xff09;四、关于printf的支持一、uart_init&#xff08;串口初始化&#xff09; 就是根据上一篇的一样的步骤&…

数据结构之树

树是一种数据结构 包括&#xff1a; 根节点 度&#xff1a;每一个节点的子节点个数 左子节点&#xff1a;左下方的节点 右子节点&#xff1a;右下方的节点 左子树 右子树 树的内部结构 二叉查找树 又称二叉搜索树或者二叉排序树 特点 每一个节点最多只有两个节点 任…

【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

先上Roms.tar.gz安装地址&#xff1a;Roms.tar.gz 以下内容是解决问题的思路&#xff0c;如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: 先是卡在&#xff1a;Building wheel for AutoROM.accept-rom-license 然后是显示安装失败…

非常优秀的网站设计案例,设计师必备

厚积才能薄发&#xff0c;一个优秀的设计师的天性一定是想要获得更多网站设计灵感&#xff0c;擅于为新项目寻找创意切入点、搜索设计参考资源、最新的设计趋势。今天为大家带来了一组免费可商用的网站设计案例&#xff0c;通过这些网站设计案例&#xff0c;你可以获得&#xf…

To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

java项目发布到kubernetes集群中&#xff0c;报错 SEVERE: The web application [] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has …

Obsidium一键编码作业,Obsidia惊人属性

Obsidium一键编码作业,Obsidia惊人属性 每个区域都包含几个可定制的功能&#xff0c;允许用户确定如何完全执行应用程序的安全性。Obsidia的功能区允许用户存储任何调整或一键编码作业。 Obsidia惊人属性&#xff1a; 代码虚拟化&#xff1a;代码虚拟化允许您转换程序代码的特定…

【电商】库存管理

库存管理&#xff0c;简单的说&#xff0c;就是管理商品和数量之间的关系。库存系统是电商后台系统中不可或缺的一部分 在电商系统中商品库存是非常重要的&#xff0c;在财务进销存系统中也梳理过存货的内容&#xff0c;在销售系统和仓库中的库存有什么区别&#xff1f; 一、什…

SSH 服务支持弱加密算法

漏洞扫描有SSH 服务支持弱加密算法&#xff0c;解决方案有两个&#xff1a; 方案一&#xff1a;修改 SSH 配置文件&#xff0c;添加加密算法&#xff1a; vi /etc/ssh/sshd_config 最后添加一下内容&#xff08;去掉 arcfour、arcfour128、arcfour256 等弱加密算法&#xff09;…

教你数分钟内创建并运行一个 DolphinScheduler Workflow

点击蓝字 关注我们作者 | 鲍亮&#xff0c;Apache DolphinScheduler PMC Member01Workflow是什么&#xff1f;对于数仓场景和数据湖场景来说&#xff0c;最显著的特点就是数据处理的长流程和高复杂度任务依赖关系&#xff0c;从源数据采集到最终报表数据的生成&#xff0c;中间…

边玩边学,13个 Python 小游戏真有趣啊(含源码)

经常听到有朋友说&#xff0c;学习编程是一件非常枯燥无味的事情。其实&#xff0c;大家有没有认真想过&#xff0c;可能是我们的学习方法不对&#xff1f; 比方说&#xff0c;你有没有想过&#xff0c;可以通过打游戏来学编程&#xff1f; 今天我想跟大家分享几个Python小游…

Docker网络模式解析

目录 前言 一、常用基本命令 &#xff08;一&#xff09;查看网络 &#xff08;二&#xff09;创建网络 &#xff08;三&#xff09;查看网络源数据 &#xff08;四&#xff09;删除网络 二、网络模式 &#xff08;一&#xff09;总体介绍 &#xff08;二&#xff09…