找出1到N中缺少的數?

《算法導論》中的練習題,

n-1個元素的數組A,含有1到n之間的n-1個數,找出缺少的那個數?

要求:O(n)

解法一:

sum = n*(n+1)/2;

sum減掉A中的每個元素,剩下的就是要找的數。

解法二:

利用異或運算,x^x==0

xor = 1^2^...^n;

xor異或A中的每個元素,最後得到的就是所求。

解法三:

增加一個空位A[n-1],將A[i]移到A[ A[i] ],

 

题目升级:

  缺失两个数,求出这两个数。

思想:

   也是采用异或。

    假设,缺失的数为s1和s2。则s1^s2=1^2^3.....^n^a[0]^a[1]^....a[n-3]。这个式子一目了然,无需多解释。

问题是如何通过这个式子求出s1与s2的值。只要能求出一个值,比如说s1,则s2=s1^(s1^s2)。

   s1^s2的值必然不为0,则必然存在一位,s1与s2在此对应位不同。我们就可以按照此对应位是0或者1,将1-n分为两堆,将a[0]-a[n-3]分为两堆。

将该为为1的两堆数相异或就能求出缺失的一个数。

   举个例子。1-7中缺失3,4。转化为二进制位:011和100。三位都不同,我们用最后一位来判别,将1-n和数组非为两堆。

  则结果为:

标志位(最后一位)10
1-n1、3、5、72、4、6
a[0]-a[n-3]1、5、72、6

用标志位为1的数进行异或

 1^3^5^7^1^5^7=3。这样就求出了一个缺失数。

// in case find two missing numbers, here size is 2 less than the range n
void find_missing_number2 (int a[], int size, int& miss1, int& miss2)
{miss1 = 0;miss2 = 0;int number=0;for (int i=0;i<size;i++)number ^= ((i+1)^a[i]);number ^= (size+1);number ^= (size+2);    // now number will be miss1^miss2// find the binary 1 in numberint k = number - (number&(number-1));for (int i=0;i<size;i++) {if ( (i+1)&k )miss1 ^= (i+1);if ( a[i]&k )miss1 ^= a[i];}if ( (size+1) & k )miss1 ^= size+1;if ( (size+2) & k )miss1 ^= size+2;miss2 = number ^ miss1;
}

 

類似的問題:

1、1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;

不用辅助存储空间,能否设计一个算法实现?

2、给你n个数,其中有且仅有一个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那一个数。

3、给你n个数,其中有且仅有两个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那两个数。

转载于:https://www.cnblogs.com/prajna/archive/2013/02/25/2932807.html

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

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

相关文章

《Python快速入门》基础知识扫盲课

据说:看我文章的帅帅 都有个习惯:先点赞、收藏再看 目录 🐜 1、Python 初体验 Pycharm 第一个程序 交互式编程第一个程序

数字技术对就业的影响分析

来源&#xff1a; 腾讯研究院技术是增长之源&#xff0c;就业是民生之本。技术进步对就业具有双重影响&#xff0c;它不仅带来新的工作机会&#xff0c;改善人们的生活&#xff1b;也会替代一些原有岗位&#xff0c;带来“技术性失业”。1930年&#xff0c;英国伟大的经济学家凯…

Android之Fragment(二)

本文主要内容 如何管理Fragment回退栈 Fragment如何与Activity交互 Fragment与Activity交互的最佳实践 没有视图的Fragment的用处 使用Fragment创建对话框 如何与ActionBar&#xff0c;MenuItem集成等 管理Fragment回退栈 类似与Android系统为Activity维护一个任务栈&#…

带你薅“云”羊毛:定个小目标,先薅他一年

点赞 ➕ 评论 ➕ 收藏 养成三连好习惯 一、2022年了&#xff0c;一块钱能干什么&#xff1f; 1块钱 能买一瓶矿泉水 1块钱 能坐一次公交 1块钱 竟然能买来一年的云服务器 哈哈哈&#xff0c;今天西红柿就带大家一块钱白嫖京东云服务器&#xff0c;当然&#xff0c;氪金也是…

ubuntu下搭建android开发环境(转载)

在ubuntu下搭建android开发环境&#xff0c;准备学习一下android开发。 1、安装JDK 首先到oracle的官网上下载linux版本的JDK&#xff08;网址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26&#xff0d;download-400750.html&#xff09;&#x…

《瓦森纳协定》——光刻机为什么就是不卖给中国!

来源&#xff1a;金属加工&#xff08;ID&#xff1a;mw1950pub&#xff09;谈起光刻机相信大家首先想到的是荷兰&#xff0c;确实如此&#xff0c;荷兰光刻机在全球都是数一数二的&#xff0c;就连最顶尖的光刻机制造公司ASML也位于荷兰&#xff0c;二荷兰光刻机之所以这么出名…

每周福利,抽8本书,已抽3本,再抽5本

参与本周抽奖CSDN文章地址 0&#xff1a;https://notomato.blog.csdn.net/article/details/122113123 本文总评论数&#xff1a;45 评论设备分布&#xff1a;{android: 11, wap: 9, pc: 23, ios: 2} 评论本文&#xff0c;被爬虫抓取进入奖池的小伙伴ID丨name&#xff1a;[sven1…

Material Design入门(三)

本文主要包括 CollapsingToolbarLayout实现滚动动画效果 ViewPagertabLayout实现左右类Tab效果 控件介绍 这次需要用到得新控件比较多&#xff0c;主要有以下几个&#xff1a; CoordinatorLayout 组织它的子views之间协作的一个Layout&#xff0c;它可以给子View切换提供…

Java学习笔记004——接口、克隆、回调、内部类

接口 1、接口不是类&#xff0c;而是对类的一组需求描述&#xff0c;这些类要遵从接口描述的统一格式进行定义 2、定义接口&#xff0c;如&#xff1a; public interface Abc{ int aaa(Object other) } 3、接口中的所有方法自动地属于public&#xff0c;声明在接口中的内部类自…

干货|2018物流机器人行业报告发布!不容错过

来源&#xff1a;楼今岁阅 摘要&#xff1a;2018年&#xff0c;我们都在谈智能家居、智能交通、智能工业、智能安防等热门物联网话题&#xff0c;并且预计到2020年&#xff0c;中国物联网的整体规模将超过1.8万亿元。发展如此迅速&#xff0c;其涉及的领域一定会越来越广&#…

【年度回忆录】如何做到1年90000粉丝?

亲爱的小伙伴&#xff1a; 小伙伴你好&#xff0c;我是不吃西红柿&#xff0c;仅以此文作为 2021 年终总结&#xff0c;顺便跟大家分享一些博主的心得经验&#xff0c;希望你我和 CSDN 都越来越好&#xff01; 一、C站点滴 翻开 2021 CSDN 年度回忆录&#xff0c;有种难以言…

Material Design综合实例

背景知识 drawlayout的使用 recycleView的使用 CardView的使用 一些开源动画库的使用 ImageView的scaleType属性与adjustViewBounds属性 &#xff0c;参考链接&#xff1a; ImageView的android:adjustViewBounds属性 - - ITeye技术网站 Android ImageView的scaleType属性与…

rcp 博客

http://lancelot.blog.51cto.com/393579/119756转载于:https://www.cnblogs.com/dazhaxie/archive/2013/02/28/2936547.html

DARPA将开发无需手术的神经技术,实现脑机接口

来源&#xff1a;IEEE电气电子工程师学会到目前为止&#xff0c;DARPA&#xff08;美国国防部高级研究计划局&#xff09;的神经科学项目部&#xff08;也称为国防部疯狂科学部门&#xff09;一直专注于可服务于那些因身体或大脑残疾回国的士兵的技术&#xff0c;例如&#xff…

《Python快速入门》6大数据类型详解

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 🍅 联系作者: 不吃西红柿 🍅 作者简介:CSDN 博客专家丨全站 Top 8🏆、HDZ 核心组成员、信息技术智库公号号主 🍅 简历模板、PPT 模板、学习资料、技术互助。关注我,都给你 很多人看西红柿的博客,花里胡哨的不知道从何学…

Debian卸载iceweasel

Debian的默认浏览器是iceweasel&#xff0c;也就是firefox的再编译版本&#xff0c;至于为什么咱下次再讲&#xff0c;这次先讲如何卸载默认安装的东西如果apt-get remove的话由于依赖关系会将gnome卸载的连毛也不剩 网也连不上就等着重装吧弱菜卸载iceweasel的时候就出现了这样…

安卓向服务器发送List数据

第一步&#xff1a; 首先写一个自定义的JavaBean&#xff0c;以UserInfo.java为例&#xff0c;需要实现对象序列化的接口&#xff0c;因为之后输出流对象需要实现输出可序列化的对象。不这样的话&#xff0c;后续时发送时会报异常 package xl.java.bean; import java.io.Ser…

2018年全球自动驾驶法律政策研究 | 附报告下载

来源&#xff1a;腾讯研究院摘要&#xff1a;2018年9月13日&#xff0c;在中国法学会研究部、腾讯研究院联合举办的“‘法律人的互联网思维’系列研修会第二期——自动驾驶汽车的技术、产业和法律维度”上&#xff0c;腾讯研究院发布《2018年全球自动驾驶法律政策研究报告》。0…

《Python 黑科技》探查Mysql数据库,输出数据质量报告

点赞 ➕ 评论 ➕ 收藏 = 三连再看你最帅 目录 🐶一、环境准备 🐱二、学习目标

网络字节序 —— 主机字节序 (Socket编程) 转

在对IP地址结构体SOCKADDR_IN赋值的时候&#xff0c;经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析&#xff0c;会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序&#xff0c;什么是…