C语言之找单身狗
个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客
题目:
在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。
例如:
数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5
这个题目说难也难,说容易也容易,主要是看能不能想到。这个题目是让我们在相同中找不同(只有5是出现一次,其他数字都出现2次,找出5),就可以想到一个操作符按位异或(^),同为0,异为1。不过这里有一个知识点:0 ^ n = n n ^ n = 0。这个题目在下面这篇文章中讲过,可以去看看。
利用操作符解题的精彩瞬间-CSDN博客
题目:
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.
如果我们还用异或的方法,就会发现这个结果不是我们想要的。但是这个思想还是用异或的方法。因为这个题目还是找不同,只不过是多了一个数,并且要全部输出。但是如果我们把这个数组分为两个数组,每个数组中都只有一个数出现一次,然后再用上面的方法:异或 ,得出结果,分别输出。我们现在就是要找到这个分组的依据,如果根据这个例子,我们就会发现可以用奇偶的方法把这两个不同的数个分开。
#include <stdio.h>
void FindNum(int* p, int sz)
{int num1 = 0;int num2 = 0;int i = 0;for (i = 0; i < sz; i++){if (*(p+i) % 2 == 1){num1 ^= *(p + i);}else{num2 ^= *(p + i);}}printf("%d %d\n", num1, num2);
}int main()
{int arr[] = { 1,2,3,4,5,6,4,3,2,1 };int sz = sizeof(arr) / sizeof(arr[0]);FindNum(arr, sz);return 0;
}
当然这个方法有局限性,只限于这两个出现一次的数,一个是奇数一个是偶数。如果两个都是奇数或者偶数不行。
这里还是用异或,将这个数组中的数全部异或到一起,把最终的结果转化为二进制。看看二进制中的1,随机选一个1,作为异或的结果。画图演示:
我们把倒数第二位的1作为分界限。把这个位是1的分成一组,是0的分成1组。当然这里可能会有小伙伴有疑惑:这个1,只是把5和6分开了,但是那些其它的数字呢?其实这里我们的目的从一开始就是要把5和6分开就行了。因为那些数都是一对的,不管是前面的奇偶性,还是二进制位都是一样的,我们分开了一个,另外一个也会跟着走。
#include <stdio.h>
void FindNum(int* p, int sz)
{//第一步把全部的数异或到一起,得出最终的结果int ret = 0;int i = 0;for (i = 0; i < sz; i++){ret ^= *(p + i);}//将ret的一个二进制位1,作为分界线,1是一组,0是一组int num1 = 0;int num2 = 0;for (i = 0; i < sz; i++){//ret >> 1就是把倒数第二位的二进制位移到倒数第一位(只有这样才能判断是否为1)//(*(p + i))) >> 1 就是和上面一样的效果。if( ((ret >> 1) & ((*(p + i))) >> 1 )== 1){num1 ^= *(p + i);}else{num2 ^= *(p + i);}}printf("%d\n", num1);printf("%d\n", num2);
}int main()
{int arr[] = { 1,2,3,4,5,6,4,3,2,1 };int sz = sizeof(arr) / sizeof(arr[0]);FindNum(arr, sz);return 0;
}
但是这个代码也是有缺陷的,只能把倒数第二位的找出(就像5和6)。如果要推广的话,就不可以,除非我们把那个异或的数的第K位为1找出来,移到想要的位数来比较。得到K的值
#include <stdio.h>
void FindNum(int* p, int sz)
{//第一步把全部的数异或到一起,得出最终的结果int ret = 0;int i = 0;for (i = 0; i < sz; i++){ret ^= *(p + i);}//将ret的一个二进制位1,作为分界线,1是一组,0是一组//接下来就是找这个1。int k = 0;for (i = 0; i < 32; i++)//最坏的结果就是找32次{if (((ret >> i) & 1) == 1)//最低位为1,则说明是1{k = i;break;}}int num1 = 0;int num2 = 0;for (i = 0; i < sz; i++){//i >> k就是把i的二进制位移了k位,看看与1的结果,如果是1,则说明该位是1if( (((*(p + i)) >> k) & 1) == 1){num1 ^= *(p + i);}else{num2 ^= *(p + i);}}printf("%d\n", num1);printf("%d\n", num2);
}int main()
{int arr[] = { 1,2,3,4,5,6,4,3,2,1 };int sz = sizeof(arr) / sizeof(arr[0]);FindNum(arr, sz);return 0;
}
这里就是可以任意找了。注意一下:在判断数组元素与1的结果是否为1时,要把括号加上去,阐明优先运算。
相关文章:

C语言之找单身狗
个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 题目: 在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。…...

读懂 FastChat 大模型部署源码所需的异步编程基础
原文:读懂 FastChat 大模型部署源码所需的异步编程基础 - 知乎 目录 0. 前言 1. 同步与异步的区别 2. 协程 3. 事件循环 4. await 5. 组合协程 6. 使用 Semaphore 限制并发数 7. 运行阻塞任务 8. 异步迭代器 async for 9. 异步上下文管理器 async with …...

【华为】GRE VPN 实验配置
【华为】GRE VPN 实验配置 前言报文格式 实验需求配置思路配置拓扑GRE配置步骤R1基础配置GRE 配置 ISP_R2基础配置 R3基础配置GRE 配置 PCPC1PC2 抓包检查OSPF建立GRE隧道建立 配置文档 前言 VPN :(Virtual Private Network),即“…...

创建一个VUE项目(vue2和vue3)
背景:电脑已经安装完vue2和vue3环境 一台Mac同时安装vue2和vue3 https://blog.csdn.net/c103363/article/details/136059783 创建vue2项目 vue init webpack "项目名称"创建vue3项目 vue create "项目名称"...

Android 10.0 动态壁纸 LiveWallpaper
前言 在 Android 中,壁纸分为动态与静态两种,但其实两者得本质都是一样。都以一个 Service 得形式在后台运行,在一个类型为 TYPE_WALLPAPER 的窗口上绘制内容。也可以这么去理解:静态壁纸是一种特殊的动态壁纸,它仅在…...

Linux内核与驱动面试经典“小”问题集锦(4)
接前一篇文章:Linux内核与驱动面试经典“小”问题集锦(3) 问题5 问:Linux内核中内存分配都有哪些方式?它们之间的使用场景都是什么? 备注:这个问题是笔者近期参加蔚来面试时遇到的一个问题。这…...
使用python实现:判断任意坐标点在STL几何模型的内部或外部
简介 在STL几何模型处理的过程中,经常需要判断一个点是否在模型的内部。网上给出的资料主要是使用C vtk的,而python vtk的很少。本文给出了一段精简版的python代码,实现判断任意坐标点在STL几何模型的内部或外部。 代码 首先定义三个函数 …...

leetcode(滑动窗口)483.找到字符中所有字母异位词(C++详细解释)DAY4
文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串&a…...

Leaf——美团点评分布式ID生成系统
0.普通算法生成id的缺点 1.Leaf-segment数据库方案 第一种Leaf-segment方案,在使用数据库的方案上,做了如下改变: - 原方案每次获取ID都得读写一次数据库,造成数据库压力大。改为利用proxy server批量获取,每次获取一…...

ProcessSlot构建流程分析
ProcessorSlot ProcessorSlot构建流程 // com.alibaba.csp.sentinel.CtSph#lookProcessChain private Entry entryWithPriority(ResourceWrapper resourceWrapper, int count, boolean prioritized, Object... args)throws BlockException {// 省略创建 Context 的代码// 黑盒…...

工业笔记本丨行业三防笔记本丨亿道加固笔记本定制丨极端温度优势
工业笔记本是专为在恶劣环境条件下工作而设计的高度耐用的计算机设备。与传统消费者级笔记本电脑相比,工业笔记本在极端温度下展现出了许多优势。本文将探讨工业笔记本在极端温度环境中的表现,并介绍其优势。 耐高温性能: 工业笔记本具有更高的耐高温性…...

游戏服务器多少钱一台?腾讯云32元,阿里云26元
游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云游戏服务器26元1个月、腾讯云游戏服务器32元,游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选,可以选择轻量应用服务器和云服务器,阿腾云atengyu…...

实战分享:SpringBoot在创新创业项目管理中的应用
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...
vue3:28— Vue 2 对 Vue 3 的所有非兼容性改变。(vue3学习笔记终)
非兼容性改变 | Vue 3 迁移指南 过渡类名v-enter 修改为 v-enter-from、过渡类名 v-leave 修改为 v-leave-from 。keyCode 作为 v-on 修饰符的支持。v-model 指令在组件上的使用已经被重新设计,替换掉了v-bind.sync.v-if 和 v-for 在同一个元素身上使用时的优先级发…...

【学习笔记】TypeScript学习笔记1 --TypeScript中的类型
文章目录 TS总的变量类型References TS总的变量类型 备注: 如果一个变量设置为了any 类型之后相当于变量关闭了TS的类型检测 let d: any; d 10; d hello;//unknown表示的是未知类型,实际是上一个安全的any,unknown类型的变量不能直接赋值给其他变量le…...
矩阵的正定(positive definite)性质的作用
1. 定义 注意,本文中正定和半正定矩阵不要求是对称或Hermite的。 2. 性质 3. 作用 (1)Axb直接法求解 cholesky实对称正定矩阵求解复共轭对称正定矩阵求解LDL实对称非正定矩阵求解复共轭对称非正定矩阵求解复对称矩阵求解LU实非对称矩阵求解…...

用python编写爬虫,爬取房产信息
题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88816284使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件,再run all就行 注意事项 可能遇到的bug 暂无,有的话私信我...

Swift Combine 从入门到精通一
1. Combine 简介 用 Apple 官方的话来说,Combine 是: a declarative Swift API for processing values over time. Combine 是 Apple 用来实现函数响应式编程的库, 类似于 RxSwift。 RxSwift 是 ReactiveX 对 Swift 语言的实现。 Combine 使用了许多可以…...

探索前端开发框架:React、Angular 和 Vue 的对决(一)
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

企业飞书应用机器人,使用python发送图文信息到群
企业飞书应用的自动化,需要创建企业应用,应用开通机器人能力,并获取机器人所需的app_id与app_secret(这一部分大家可以在飞书的控制台获取:https://open.feishu.cn/api-explorer/) 文章目录 步骤1ÿ…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...