找出连续数字中缺失的数字
今天有一个业务上的问题,那就是在一串连续的数字中找出缺失的数字,我第一想到的就是借助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的和,相减就可以得到两个数了。
找出连续数字中缺失的数字相关推荐
- 找出JS数组中最大的数字
1.es6拓展运算符... Math.max(...arr) 2.es5 apply(与方法1原理相同) Math.max.apply(null,arr) 3.for循环 let max = arr[ ...
- 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码
//1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, ...
- 在字符串中找出连续最长的数字串
微软面试题之一,难度系数低. 题目描述如下: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的 ...
- 算法题:“找出单身狗”--找出一个数组中只出现一次的数字
题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次. 编写一个函数找出这两个只出现一次的数字. 解题过程以及思路:(思路在代码中以注释形式给出) //一个数组中只有两个数字是出现一次,其 ...
- isalnum()函数:找出str字符串中为英文字母或数字的字符
找出str字符串中为英文字母或数字的字符 (1)Linux下编程用到的函数是:int isalnum(int c) 返回值:若参数c为字母或数字,则返回TRUE:否则返回NULL(0) #includ ...
- 找出一个数组中唯一一个出现2次的数字
找出一个数组中唯一一个出现2次的数字,不清楚是不是LeetCode上的题.本人默认是LeetCode上的题. 一个数组中有N个数字,但是只有一个数字出现了2次,其他的数字均不相同.这种问题一般应该采用 ...
- 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值
我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...
- 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字
1.概述 剑指 Offer 53 - II. 0-n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...
- 0-n-1中缺失的数字
0-n-1中缺失的数字 一共N个数范围在0 ~ n-1 之间: 但是数组的长度只是n - 1 所以有一个数缺失了,找出那个缺失的数字. 有两个关键信息: 数组是有序的,递增 数字都是唯一的,就少一个数 ...
- 剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)
/*** 剑指 Offer 53 - II. 0-n-1中缺失的数字* @author wsq* @date 2020/10/08一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在 ...
最新文章
- jenkins添加git源码目录时报Error performing command错误
- 收藏的Web安全管理资料相关
- 多线程模式之MasterWorker模式
- 福昕pdf虚拟打印机_一学就会的PDF文档压缩小技巧
- mybatis批量插入oracle报表达式,mybatis oracle两种方式批量插入数据
- 在阿里工作5年了,斗胆谈谈我认为的高级开发到底应该是怎样的?
- 使用磁盘为Linux添加swap
- python变量名称跟着循环_python在循环中存储每次迭代使用不同名称的输入变量
- CF1025C Plasticine zebra
- 【Kafka】kafka消费组查看lag
- 学习 ASP.NET MVC (第二回)实战篇
- 简单的制作一个动态链接库(DLL)
- 数据库配置文件,db.properties、jdbc.properties
- Android 友盟分享自定义面板使用
- 服务器子接口配置的几种方式:子接口模式、vlan模式
- 图像处理之图像直方图
- 软件工程专业和网络工程专业的区别
- 红帽RHCE考试要注意的几点
- php tipask yii 单点登录_Tipask问答系统 php版 v3.3.1 正式版
- TpLink路由访问控制
热门文章
- Vue外卖十一:登录成功信息显示、浏览器cookie+后端session登录状态保持
- python可以做什么灰产-广州市标书资料销毁详细流程
- 【清华大学陈渝】第三章 计算机体系结构
- golang连接FTP服务器并下载
- 「计算机网络」五层因特网协议栈的简要介绍和分组名称
- gin框架自带的一些的鉴定权限机制 session cookie
- java基于微信小程序的在线学习考试测试系统小程序 uniapp
- 电脑桌面的计算机网络回收站图标不见了,桌面回收站图标不见了怎么办 回收站图标找回方法【图文】...
- 股票中,什么是滚动市盈率,有什么作用?
- PTA-寻找孪生素数