C:每日一题:单身狗

​​​​

一、题目

在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。

整型数组 int arr[ ] = {1,1,2,2,3,4,4}

二、思路分析:

1.,明确目标,选择合适的算法

我们需要在数组中找出单个出现的数字;由于相同数字异或的结果为 0 ,而任何数字与 0 异或都得到其本身。可以通过对数组中所有数字进行异或操作,最终得到的结果就是只出现一次的数字。

2.考虑可能存在的bug

数组可能为空数组或者所求元素个数为负数的情况

if (sz <= 0 || arr == NULL)

3.设计一个函数来完成计算数组中出现一次的元素

三、自定义函数number作用

int number(int arr[], int sz)
{if (sz <= 0 || arr == NULL)//防止数组为空或者非法的情况{printf("输入错误!\n");return -1;}int re = 0;int i = 0;for(i = 0;i<sz;i++){re ^= arr[i];}return re;
}

number函数的作用是:

  • 通过条件判断 sz <= 0 || arr == NULL 来确保输入的数组不是空数组或者不存在的。如果是,就打印错误提示并返回 -1 。
  • 使用一个循环遍历数组的每个元素。通过异或操作 来计算。由于相同的数异或结果为 0 ,而任何数与 0 异或都得到其本身,所以最终异或操作 re ^= arr[i]; 的结果就是数组中只出现一次的元素。

四:主函数main的作用

int main()
{int arr[] = {1,2,3,4,5,1,2,3,4,5,6};int sz = sizeof arr / sizeof(arr[0]);int single = number(arr, sz);if (single != -1){printf("%d 是单身狗", single);}return 0;
}

main作用是:

  • 定义了整数数组 arr 并初始化。
  • 通过 sizeof 操作计算数组的大小并存储在sz 中。
  • 调用  number 函数来计算数组中只出现一次的元素,并将结果存储在single  中。
  • 通过条件判断 single != -1;,如果计算成功(即不是因为输入错误返回的 -1 ),就打印出结果并说明是“单身狗”。

五:解析代码 re ^= arr[i]

re ^= arr[i]  就等于 re = re ^ arr[i]

^异或运算重要的两个性质:

  • 相同为0,相异为1;
  • 任何数与 0 进行异或运算结果为其本身。

举个例子: int arr[ ] = {1,1,2,3,3}

初始re = 0;

re = re ^ 1 = 1;此时re = 1;

re = re ^ 1 = 1 ^ 1 = 0;此时re = 0;

re = re ^ 2 = 0 ^ 2 = 2;此时re = 2;

re = re ^ 3 = 2 ^ 3 =0010 ^ 0011 = 0001=1(十进制),此时re = 1;

re = re ^ 3 = 1 ^ 3 =0001 ^ 0011 = 0010 = 2(十进制),re = 2;

所以单身狗是2.

这是因为成对出现的元素在异或过程中相互抵消为 0 ,而只出现一次的元素不会被抵消,最终就留在了 re  中。

六、完整代码及注释

#include <stdio.h>
int number(int arr[], int sz) 
{   if (sz <= 0 || arr == NULL)  // 检查输入的数组有误,若有误则打印错误信息并返回 -1{printf("输入错误!\n");return -1;}int re = 0;  // 用于存储异或运算的结果int i = 0;  for (i = 0; i < sz; i++) // 遍历数组进行异或运算{re ^= arr[i];  // 每次将当前元素与 re 进行异或操作}return re;  // 返回最终的异或结果,即为只出现一次的数字
}
int main() 
{int arr[] = {1,2,3,4,5,1,2,3,4,5,6};int sz = sizeof arr / sizeof(arr[0]);  // 计算数组的大小int single = number(arr, sz);  // 调用函数计算只出现一次的数字if (single!= -1) // 如果计算结果不为 -1,即输入合法且找到了只出现一次的数字,进行输出{printf("%d 是单身狗", single);}return 0;
}

结果展示:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++相关内容模块

C相关内容模块 单例模式&#xff0c;实现创建类中的对象&#xff0c;保证该类只能实例化一个唯一的对象 单例模式&#xff0c;实现创建类中的对象&#xff0c;保证该类只能实例化一个唯一的对象 #define _CRT_SECURE_NO_WARNINGS // 抑制 C4996 警告 #include<iostream>…

8月echarts记录-雷达图tooltip实现单轴显示、解决柱状/折线图点击非图表图形元素不会触发事件、多柱形图点击选中改变背景颜色等

8月echarts记录-雷达图tooltip实现单轴显示、解决柱状/折线图点击非图表图形元素不会触发事件、柱形图点击选中改变背景颜色等 雷达图tooltip实现单轴显示问题描述解决方案 解决柱状/折线图点击非图表图形元素不会触发事件问题描述解决方案1. 使用API convertFromPixel和getZr实…

Redis17-服务端优化

目录 持久化配置 慢查询 什么是慢查询 如何查看慢查询 命令及安全配置 内存配置 集群优化 持久化配置 Redis的持久化虽然可以保证数据安全&#xff0c;但也会带来很多额外的开销&#xff0c;因此持久化请遵循下列建议&#xff1a; 用来做缓存的Redis实例尽量不要开启持…

一文讲清三极管

说明 下图是一个NPN型的三极管 由于发射极正偏,发射极的多数载流子(无论是P的空穴还是N的自由电子)会不断扩散到基极,并不断从电源补充多子,形成发射极电流IE。由于基极很薄,且基极的多子浓度很低,所以从发射极扩散过来的多子只有很少一部分和基极的多子复合形成基极电…

进程waitwaitpid、线程

一、wait wait功能 1、获取子进程退出状态&#xff0c;分析子进程是否已经退出&#xff08;变成僵尸态&#xff09; 2、回收资源&#xff0c;让僵尸态子进程销毁 wait本身是一个阻塞操作&#xff0c;会使调用者阻塞 2、宏&#xff1a; &#xff08;1&#xff09;WIFEXITE…

加密软件排行榜前五名,为你的数据安全保驾护航

加密软件成为了保护数据中不可缺少的一部分&#xff0c;这是一个重要的存在&#xff0c;能够保护机密文件&#xff0c;防止泄密。加密软件就是专门用于保护数据安全的&#xff0c;近年来多个加密软件的出现&#xff0c;使用户在挑选加密软件时多了一些选择&#xff0c;同时也成…

坐牢第二十五天20240813(网络通信)

一、TCP机械臂测试 通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 注意&#xff1a;关闭计算机的杀毒软件&#xff0c;电脑管家&#xff0c;防火墙 1&#x…

小阿轩yx-Docker Compose与私有仓库部署

小阿轩yx-Docker Compose 与私有仓库部署 Docker 的网络模式 Docker 四种网络模式 网络模式参数说明host 模式- - nethost 容器和宿主机共享 Network namespace container 模式- - net{id} 容器和另外一个容器共享 Network namespace。 kubernetes 中的pod就是多个容器共享一…

于博士Cadence视频教程学习笔记备忘

标签&#xff1a;PCB教程 PCB设计步骤 cadence教程 Allegro教程 以下是我学习该视频教程的笔记&#xff0c;记录下备忘&#xff0c;欢迎大家在此基础上完善&#xff0c;能回传我一份是最好了&#xff0c;先谢过。 备注&#xff1a; 1、未掌握即未进行操作 2、操作软件是15.…

论文阅读笔记:ST-MetaNet-2

目录 预备知识 定义1&#xff1a;城市交通 定义2&#xff1a;Geo-graph属性 问题1 方法 RNN 元学习器 元图注意力网络 元循环神经网络 预备知识 在本节中&#xff0c;我们介绍定义和问题陈述。为简洁起见&#xff0c;我们在表1中提供了一个注释表。 假设有个位置&…

40.【C语言】指针(重难点)(E)

目录 13.指针的使用和传址调用 14.数组名的理解 *数组名就是数组首元素的地址 *两个例外 *使用指针访问数组 *一维数组的传参本质 往期推荐 承接上篇39.【C语言】指针&#xff08;重难点&#xff09;&#xff08;D&#xff09; 13. 指针的使用和传址调用 见29.【C语言】函数系…

Android开发-使用FFmpeg-Android进行音视频处理

使用 FFmpeg-Android 进行音视频处理 1. 前言2. FFmpeg-Android 简介3. 功能介绍及实现3.1. 视频字幕添加Kotlin 代码示例&#xff1a;3.2. 尺寸剪切Kotlin 代码示例&#xff1a;3.3. 添加或去除水印Kotlin 代码示例&#xff1a;3.4. 时长截取Kotlin 代码示例&#xff1a;3.5. …

抠图软件哪个好用?3款免费抠图软件!一键智能抠图,高清又高效小白必备!

前言 目前市场上有众多出色的抠图软件&#xff0c;能够高效地完成图片处理工作。在这里推荐三款免费的抠图工具&#xff0c;它们都是非常省力、灵活的一键智能抠图利器&#xff0c;值得收藏&#xff01; 抠图软件一&#xff1a;千鹿设计助手 第一步&#xff0c;打开“千鹿设计…

安全无忧!Windows7全补丁旗舰版:集成所有补丁!

今日&#xff0c;系统之家小编给大家分享集成所有补丁的Windows7旗舰版系统&#xff0c;集成至2023.12所有官方补丁&#xff0c;修复了系统高危漏洞&#xff0c;让大家时刻都能舒心地展开操作。系统基于微软 Windows 7 2009 SP1 旗舰版进行离线制作&#xff0c;全新升级的优化方…

linux文件查找--locate和find命令详解

在文件系统上查找符合条件的文件 文件查找:1.非实时查找(数据库查找):locate2.实时查找: find应用&#xff1a;生产环境中查找到系统中占用磁盘空间较大且时间比较久的大日志文件&#xff0c;对这个较大的日志文件做处理&#xff08;删除移走等)&#xff0c;防止它占用更多的磁…

如何判断监控设备是否支持语音对讲

目录 一、大华摄像机 二、海康摄像机 三、宇视摄像机 一、大华摄像机 注意&#xff1a;大华摄像机支持跨网语音对讲&#xff0c;即设备和服务器可以不在同一网络内&#xff0c;大华设备的语音通道填写&#xff1a;34020000001370000001 配置接入示例&#xff1a; 音频输入…

vue3重构一款仿饿了没APP实战项目

最近重构了一款比较流行的app项目&#xff0c;采用的是vue3做的h5项目&#xff0c;细节知识点很多&#xff0c;滚动&#xff0c;动画&#xff0c;数据通信&#xff0c;状态缓存等&#xff0c;想要学习交流的小伙伴赶紧行动起来。 图1 图2 图1 图2 图3 图4 图5 图5

若依框架中的mybatis依赖在哪里?

对于刚刚接触若依框架的朋友,可能会比较懵逼,因为他可能在依赖文件中没有找到mybatis的依赖是在什么地方引入的,所以本章教程,就告诉你这个依赖是在什么地方引入的。 在ruoyi-common模块中的pom.xml 存在一个pagehelper-spring-boot-starter <!-- pagehelper 分页插件 -…

docker资源控制与数据卷

docker数据卷 容器和宿主机之间数据共享---------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。 容器的生命周期有限&#xff0c;一旦重启所有对容器内部文件数据修改以及保存的数据都会被初始化&#xff0c;为了防止数据的丢失&#xff0c;重要…

【大模型系列篇】Transformers综述--邱锡鹏

论文标题&#xff1a;A Survey of Transformers 论文作者&#xff1a;Tianyang Lin, Yuxin Wang, Xiangyang Liu, Xipeng Qiu 论文链接&#xff1a;https://arxiv.org/abs/2106.04554 Transformer 在许多人工智能领域&#xff08;如自然语言处理、计算机视觉和音频处理&#…