数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字, 空间复杂度O(1)。
这个题其实考察的是我们怎样用最少的辅助空间求出数组中缺少的两个数。其实可以通过数学思想解决这两个问题。
首先缺少的两个数假设是a和b,那如果我们能计算出a+b和a-b,自然就能计算出a和b的值,也就是数组中缺少的值。
那怎么得到a+b呢?我们一只N个中的N-2个那用N个和减去N-2个已知的数就可以了。
那怎么计算两个数的差值即a-b呢??
直接计算没思路,其实我们可以按照上面的思路,先计算出1……N的平方和,然后减去已知的N-2个数的平放,就得到了a*a+b*b了。
然后就可以得到a-b的平方再开放就ok了。
两个公式如下:
等差数列求和:sum=N(N+1)/2
连续自然数的平方和公式:N(N+1)(2N+1)/6
看看具体实现代码吧O(∩_∩)O哈哈~
private static void find()
{
int[] A = new int[] { 1, 3, 4, 8, 7, 5, 6, 10, 11, 12 };
int n = A.length + 2;
int sum = (n * (n + 1)) >> 1;
int squareSum = sum * (2 * n + 1) / 3;
for (int i = 0; i < A.length; i++)
{
sum -= A[i];
squareSum -= A[i] * A[i];
}
int ASubB=(int) Math.sqrt(-(sum*sum)+2*squareSum);
System.out.println(((sum + ASumB) >> 1)+ " and "+ ((sum - ASumB) >> 1));
}
上述代码由Java语言实现
camel骆驼男士凉鞋 真皮潮流魔术贴沙滩鞋男鞋 夏季新款正品凉鞋 只要56元!
http://redirect.simba.taobao.com/rd?w=unionnojs&f=http%3A%2F%2Fai.taobao.com%2Fauction%2Fedetail.htm%3Fe%3DYNbrUj%252FZdJwjmraEDZVrLkKA%252ByOYgzU6TbuPAry6zvGLltG5xFicOdXrTUTgh9sMDPIwxrc30rhF03SVjj78hGqYCHH8uv2oZb7Xhy%252F%252BGHmWC8e6JwspUeIZWR1bMnHu%26unid%3D96391090%26ptype%3D100010%26from%3Dbasic&k=5ccfdb950740ca16&c=un&b=alimm_0&p=mm_96391090_7268811_24064425
http://redirect.simba.taobao.com/rd?w=unionnojs&f=http%3A%2F%2Fai.taobao.com%2Fauction%2Fedetail.htm%3Fe%3DsmP1GufbVc4jmraEDZVrLqyWM2UFoMuM7AU7Qokl6rSLltG5xFicOdXrTUTgh9sMDPIwxrc30rhF03SVjj78hGqYCHH8uv2oZb7Xhy%252F%252BGHmWC8e6JwspUeIZWR1bMnHu%26unid%3D96391090%26ptype%3D100010%26from%3Dbasic&k=5ccfdb950740ca16&c=un&b=alimm_0&p=mm_96391090_7268811_24064425
- 大小: 49.6 KB
分享到:
相关推荐
数据结构教程(JAVA语言描述) 求一个含有n个整数元素的数组a[0..n-1]中的最大元素,有这样一种思路:先比较第一个元素,再比较第二个元素,比较过程向中间靠近
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
Java中数组实例---求数组元素的最大值.pdf 学习资料 复习资料 教学资源
数据结构教程(JAVA语言描述) 设计一个算法,将含有n个整数元素的数组a[0..n-1]循环右移m位,要求算法的空间复杂度为O(1)
有m个数组,每个数组有n个元素。列出所有可能的组合。 如:arr1{aa,bb,cc},arr2{11,22,33},得到的组合是: aa11,aa22,aa33,bb11,bb22,bb33,cc11,cc22,cc33
json转对象数组与数组转json--java--
java-区分数字元素和字符串元素的数组排序-代码,希望能帮到大家
给定两个整型数组,本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。 输出格式: 在一行中按照数字给出的...
js超简单实用随机产生1-100个数字不重复
剑指offer面试题库中第三题的C语言代码。在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
labview删除数组中的重复元素,不改变顺序,留下不重复的元素
2. 遍历到第二个元素1,将其加入当前子数组中,当前子数组和为-1,最大子数组和为1。 3. 遍历到第三个元素-3,将其加入当前子数组中,当前子数组和为-4,最大子数组和为1。 4. 遍历到第四个元素4,将其加入当前子...
话不多说,下面就跟着小编来看下利用jquery实现删除数组中重复元素的具体思路吧 首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素’2′; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok...
LabVIEW 删除数组中重复元素实例 , LabVIEW8.2 编写 删除数组中重复的元素. 查找重复元素 并删除重复
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2...
主元素问题: 设T[0..n-1]是n个元素的数组。对任一元素x,设S(x)={i|T[i]=x}。当|S(x)|>n/2时,称x为T的主元素。如果T中元素存在序关系,按分治策略设计并实现一个线性时间算法,确定T[0..n-1]是否有一个主元素。
Labview中一种删除重复元素的方法
最近有个需求,是做两个数组重复程度计算,麻烦就麻烦在单个数组的元素有可能重复,处理思路如下: 1. 找到重复元素 2. 元素个数统计,利用np.bincount转换,即元素个数统计到元素转化的索引 3. 统计相同元素匹配个...
求解找到数组A[1..n]中元素的最大值和次最大值(本小题以数组元素的比较为标准操作)的算法,并分析其最坏情况的时间复杂度。
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2...