首页 > 其他分享 >找出只出现一次的数字

找出只出现一次的数字

时间:2023-01-24 16:00:40浏览次数:26  
标签:count 找出 一次 数字 int arr ret printf sizeof

题目

给定一个非空整型数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出那个只出现了一次的元素

int a[]={1,2,3,4,5,1,2,3,4};该数组只有5出现一次,其他数组都是成对的出现,要求找到5

思路一

#include<stdio.h>
int main()
{
int arr[]={1,2,3,4,5,1,2,3,4};
int i=0;//下标
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
int count=0;
int j;
for(j=0;j<sz;j++)
{
if(arr[i]==arr[j])
{
count++;
}
}
if(count==1)
{
printf("找到了:%d\n",arr[i]);
break;
}
}
return 0;
}

关键部分:

for(i=0;i<sz;i++)
{
int count=0;
int j;
for(j=0;j<sz;j++)
{
if(arr[i]==arr[j])
{
count++;
}
}
if(count==1)
{
printf("找到了:%d\n",arr[i]);
break;
}
}

其中两个for的目的是使在每一个大循环前提下找到是否有与这个大循环的数相等的值 这个值在小循环里依次进行了循环

count用来记录每个数出现的次数,如果是1那就是所需要的数

算法缺陷:运行效率太低

思路二

#include<stdio.h>
int main()
{
int arr[]={1,2,3,4,5,1,2,3,4};
int i;
int sz=sizeof(arr)/sizeof(arr[0]);
int ret=0;
for(i=0;i<sz;i++)
{
ret=ret^arr[i];
}
printf("%d\n",ret);
return 0;
}

主要部分:

  for(i=0;i<sz;i++)
{
ret=ret^arr[i];
}

异或:按二进制位进行 相同为0 相异为1;满足交换律

a^a=0; a^0=a  

所以:1^1^2^2^3^3^4^4^5=5

缺陷:这是针对题目的算法 只能在其中找到一个只出现一次的数

标签:count,找出,一次,数字,int,arr,ret,printf,sizeof
From: https://blog.51cto.com/u_15899086/6022309

相关文章

  • 记录一次Spring事务线上异常
    Spring事务管理配置方式:XML模糊匹配,绑定事务管理注解,可对每个需要进行事务处理的方法单独配置,只需@Transactional,然后添加属性配置为简便,本文使用注解方式。Spring初始化时......
  • 数字孪生:打破虚实界限,开发无限可能
    近年来,数字孪生得到了越来越广泛的传播,得益于物联网、大数据、云计算、人工智能等新一代信息技术的发展,数字孪生已经在智慧城市、智慧园区、智能制造等领域沉淀了大量优秀......
  • 记录一次python爬虫模拟登录吧
    测试网站是本人学校,费话不多说下面开始首先直接导库,过程中需要时间戳,rsa加密importrequestsimportreimporttimefromCrypto.PublicKeyimportRSAfromCrypto.Ci......
  • 经营私域流量 引领数字经济
    一、私域流量?   流量池是指拥有巨大流量、可以源源不断获取客户的渠道。如淘宝、百度、抖音、微博都是流量池。   私域流量则是企业或品牌私有的流量池,可以把平......
  • 用Python下载第一次陷入小说
    #-*-coding:utf-8-*-importrequestsimportreimportos#判断有没有该文件夹,没有加创建一个ifnotos.path.exists('青春无悔'):os.mkdir('青春无悔')ur......
  • 数字乡村顶层设计
    数字乡村(农村)平台架构“1”个大数据中心+“4”大智慧平台+“N”个智慧应用场景数字乡村平台架构数字乡村大数据平台-数字乡村一张图基于数据中心,形成数字乡......
  • 程序:用递归法依次打印1234数字
    #include<stdio.h>voidprint(inta){if(a>9){print(a/10);}printf("%d",a%10);}intmain(){inta=1234;print(a);return0;}......
  • 程序:运用函数找到所要求的数字下标
    #include<stdio.h>intbinary_search(intarr[],inta,intlen){intleft=0;intright=len-1;intmid=0;while(left<=right){mi......
  • 程序:计算10个数字中最大的一个
    #include<stdio.h>intmain(){intarr[]={1,3,4,5,7,8,9,10,12,2};intmax=arr[0];intleft=0;intright=sizeof(arr)/sizeof(arr[0]);for(left=0;......
  • 程序:运用函数找出100至200的素数,并数出个数
    #include<stdio.h>intif_a_is_prime(intd){intc=2;for(c=2;c<d;c++){if(d%c==0){return0;}}return1;}intmain(){inta=......