今天有一个业务上的问题,那就是在一串连续的数字中找出缺失的数字,我第一想到的就是借助hashmap去实现。如下:

int[] array = new int[]{1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};Hashtable<Integer, Integer> hasht =new Hashtable<Integer, Integer>();for (int i = 0; i < array.length-1; i++) {hasht.put(array[i], 1);}for (int i = 1; i <= array.length; i++) {if (hasht.get(i) == null) {System.out.println("缺失:" + i);}}

上述的方式是可以实现查询出想要的结果的。那么还有没有其他的办法实现呢?

int a[] = {1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};int b[] = null;b = new int[20];for (int i = 0; i < a.length; i++) {b[a[i] - 1] = 1;}for(int i = 0; i < b.length; i++) {if (b[i] == 0) {System.out.println("the lost number is " + (i + 1));}}

上述的方式就是使用数组来实现。

也可以借助用1+2+…+n减去当前输入数据的总和,则所得的差就是缺失的那个数。 时间复杂度:O(n) 空间复杂度:O(1)。但n过大时,求和存在溢出问题。

int a[] = {1, 2, 4, 5, 6,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};int sum = 20*(20+1)/2;int t;for(int i=0; i<20-1; i++){sum = sum - a[i];}System.out.println("sum="+sum);

二、题目扩展:数组中缺失两个数?
同样的可以用两种方法: 
对数据从min~max求和,为S1;并且求出数组中所有元素的和,为S2; 记缺失的数据为a,b。S1-S2=a+b; 那么a、b,一定是一个比(a+b)/2小,一个比它大。再遍历一遍数组,以(a+b)/2为分界线,较小的加为Smin,较大的加为Smax。求出min~(a+b)/2和(a+b)/2~max的和,相减就可以得到两个数了。

找出连续数字中缺失的数字相关推荐

  1. 找出JS数组中最大的数字

    1.es6拓展运算符... Math.max(...arr) 2.es5 apply(与方法1原理相同) Math.max.apply(null,arr) 3.for循环 let max = arr[ ...

  2. 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码

    //1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, ...

  3. 在字符串中找出连续最长的数字串

    微软面试题之一,难度系数低. 题目描述如下: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)  功能:  在字符串中找出连续最长的 ...

  4. 算法题:“找出单身狗”--找出一个数组中只出现一次的数字

    题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次. 编写一个函数找出这两个只出现一次的数字. 解题过程以及思路:(思路在代码中以注释形式给出) //一个数组中只有两个数字是出现一次,其 ...

  5. isalnum()函数:找出str字符串中为英文字母或数字的字符

    找出str字符串中为英文字母或数字的字符 (1)Linux下编程用到的函数是:int isalnum(int c) 返回值:若参数c为字母或数字,则返回TRUE:否则返回NULL(0) #includ ...

  6. 找出一个数组中唯一一个出现2次的数字

    找出一个数组中唯一一个出现2次的数字,不清楚是不是LeetCode上的题.本人默认是LeetCode上的题. 一个数组中有N个数字,但是只有一个数字出现了2次,其他的数字均不相同.这种问题一般应该采用 ...

  7. 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值

    我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...

  8. 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字

    1.概述 剑指 Offer 53 - II. 0-n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  9. 0-n-1中缺失的数字

    0-n-1中缺失的数字 一共N个数范围在0 ~ n-1 之间: 但是数组的长度只是n - 1 所以有一个数缺失了,找出那个缺失的数字. 有两个关键信息: 数组是有序的,递增 数字都是唯一的,就少一个数 ...

  10. 剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

    /*** 剑指 Offer 53 - II. 0-n-1中缺失的数字* @author wsq* @date 2020/10/08一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在 ...

最新文章

  1. jenkins添加git源码目录时报Error performing command错误
  2. 收藏的Web安全管理资料相关
  3. 多线程模式之MasterWorker模式
  4. 福昕pdf虚拟打印机_一学就会的PDF文档压缩小技巧
  5. mybatis批量插入oracle报表达式,mybatis oracle两种方式批量插入数据
  6. 在阿里工作5年了,斗胆谈谈我认为的高级开发到底应该是怎样的?
  7. 使用磁盘为Linux添加swap
  8. python变量名称跟着循环_python在循环中存储每次迭代使用不同名称的输入变量
  9. CF1025C Plasticine zebra
  10. 【Kafka】kafka消费组查看lag
  11. 学习 ASP.NET MVC (第二回)实战篇
  12. 简单的制作一个动态链接库(DLL)
  13. 数据库配置文件,db.properties、jdbc.properties
  14. Android 友盟分享自定义面板使用
  15. 服务器子接口配置的几种方式:子接口模式、vlan模式
  16. 图像处理之图像直方图
  17. 软件工程专业和网络工程专业的区别
  18. 红帽RHCE考试要注意的几点
  19. php tipask yii 单点登录_Tipask问答系统 php版 v3.3.1 正式版
  20. TpLink路由访问控制

热门文章

  1. Vue外卖十一:登录成功信息显示、浏览器cookie+后端session登录状态保持
  2. python可以做什么灰产-广州市标书资料销毁详细流程
  3. 【清华大学陈渝】第三章 计算机体系结构
  4. golang连接FTP服务器并下载
  5. 「计算机网络」五层因特网协议栈的简要介绍和分组名称
  6. gin框架自带的一些的鉴定权限机制 session cookie
  7. java基于微信小程序的在线学习考试测试系统小程序 uniapp
  8. 电脑桌面的计算机网络回收站图标不见了,桌面回收站图标不见了怎么办 回收站图标找回方法【图文】...
  9. 股票中,什么是滚动市盈率,有什么作用?
  10. PTA-寻找孪生素数