题目:数组
A
中包含
n-1
个
[0,n-1]
内的不同整数,
n
个数中只有一个数不在所给的数组中。
解法一:
[0,n-1]
这个区间中所有整数的和不变,为
n*(n-1)/2
,对数组
A
中的所有元素求和,设为
s
,则丢失的整数就是
n*(n-1)/2
–
s
。
解法二:异或运算。
异或是个非常神奇的运算。设所缺的整数为
k
,
[0,n-1]
区间中所有
n
个数的异或结果为
s(n)
,异或运算满足交换率和结合率,所以
s(n)
可以被看作
[0,n-1]
中去掉
k
外的另外
n-1
个数的异或结果
s(n-1)
和
k
的异或。也即:
s(n)=s(n-1)^k
,我们给等式两边同时异或
s(n-1)
,等式变成了:
s(n-1)^s(n)=s(n-1)^s(n-1)^k=k
。而且,很明显
s(n-1)
其实就是数组
A
中所有元素的异或。所以,解法二就是:求出
[0,n-1]
内所有整数的异或结果
s
,再求出数组
A
中所有元素的异或结果
t
,所缺的整数就是
s
异或
t
。
public class XorTest {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] b = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
System.out.println(xorArray(a, b));
}
public static int xorArray(int[]... ias) {
int result = 0;
for (int i = 0; i < ias.length; i++) {
result ^= xorArray(ias[i]);
}
return result;
}
public static int xorArray(int[] ia) {
int result = 0;
for (int i = 0; i < ia.length; i++) {
result ^= ia[i];
}
return result;
}
}
分享到:
相关推荐
对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数 最小的删数方案。 «编程任务: 对于给定的正整数a,编程计算删去k个数字后得到的最小数。 Input 由文件input.txt提供输入数据。文件的第1...
2. **反光检测**:可以使用边缘检测算法(如Canny、Sobel或Prewitt)来初步识别高亮边缘,或者利用阈值分割方法找出亮度异常的区域。`SpecularDetectionCharlesAuguste2007.m`可能是一个实现反光检测的MATLAB脚本,...
4. 分割与归一化:使用 bwlabel 进行连通成分标记,找出单个数字,然后使用imresize进行尺寸归一化。 5. 训练分类器:可以选择SVM或者神经网络作为分类器,使用fitcecoc或feedforwardnet等函数进行模型训练。 6. ...
4. **模板匹配**:将提取的特征与预定义的数字模板进行匹配,找出最相似的模板,以此来识别数字。也可以使用其他特征匹配方法,如余弦相似度或欧氏距离。 5. **机器学习分类**:更现代的方法是使用机器学习算法,如...
模板匹配是识别数字的一种方法,它涉及到找出预定义模板与图像中可能存在的相似区域。MATLAB的matchTemplate函数可以帮助我们进行模板匹配。我们首先需要创建一个干净的数字模板,然后将其与每个切割后的数字进行...
边缘检测,如Canny算法,能找出图像中的边界;角点检测,如Harris角点检测器,可以定位图像中的显著结构。这些特征对于图像识别、分类和匹配至关重要。 图像分割是将图像分成具有不同特性的区域,常用的方法有阈值...
3. 数字模板匹配:在预处理和特征提取之后,可以使用模板匹配方法来比较图像中的数字部分与已知数字模板,找出最匹配的数字。这种方法简单但可能对图像变形不敏感。 4. 字符分割:在复杂背景下,数字可能与其他字符...
6. 边缘检测:Canny算法、Sobel算子、Prewitt算子等是常见的边缘检测方法,它们能找出图像中的边界,为后续的特征提取和形状识别提供基础。 7. 分割与区域生长:图像分割是将图像划分为多个具有不同特征的区域,如...
模板匹配是一种比较图像的局部区域与模板图像的方法,以找出最佳匹配。在信用卡数字识别中,我们可以预先定义一个数字模板,然后在信用卡数字上滑动并找到最相似的部分,从而识别出数字。 模板匹配在OpenCV中通过`...
7. **轮廓检测与识别**:最后,我们需要找出图像中的数字轮廓,并进行识别。`findContours`函数用于检测图像的轮廓,然后使用诸如模板匹配或机器学习方法(如SVM、神经网络)对数字进行分类。 在提供的`testNumber`...
边缘检测则是找出图像中目标物体轮廓的过程,常用算法有Canny边缘检测、Sobel算子等。这两个步骤对于识别和分析图像中的对象至关重要。 **实验四:数学形态学及其应用** 数学形态学是基于形状和结构的图像处理方法...
4. **最值**:在图像处理中,可能需要找出图像的最小值或最大值,这在全局对比度调整或寻找特定特征时很有用。C++可以方便地遍历图像数组,找到这些最值。 5. **离散余弦变换(DCT)**:DCT是一种信号处理技术,常...
通过解答这些问题,学习者可以检验自己的理解程度,找出知识盲点,并进一步深化对数字信号处理理论和应用的理解。 总的来说,这份“数字信号处理试卷”是一个宝贵的资源,能够帮助学习者克服这门学科的挑战,提高...
`Canny()`函数可以帮助我们找到图像中的边缘,而`findContours()`函数则可以查找这些边缘形成的封闭区域,这些可能就是我们要找的数字。 3. 形状分析和特征提取:对轮廓进行形状分析,比如计算其面积、周长、形状...
课后习题答案详细全面,能够帮助学生检查自己的理解程度,找出学习中的盲点。遇到困难时,可以参考答案解析,了解解题思路和方法。而实验部分的答案则能为学生提供正确的代码实现和步骤指南,避免在实验过程中迷失...
它能找出图像中的边界,有助于突出数字轮廓。另一类方法是直方图均衡化,它能增强图像的对比度,使数字特征更加明显。 特征提取后,通常会进行形态学操作,如腐蚀和膨胀,以去除噪声并保留数字的基本形状。腐蚀可以...
这个压缩包中的历年真题,可以帮助考生了解考试的出题趋势和重点,通过解答真题可以检验自己的学习效果,找出知识盲区。尤其是对于14、15、16年没有答案的题目,可以自行尝试解答后,参考其他年份的答案或请教专业...
OpenCV集成了这些算法,可以方便地找出图像的边缘信息。 6. **轮廓检测**:在找到边缘后,轮廓检测能进一步提取出连续的边界。OpenCV的findContours和drawContours函数可以帮助我们提取和绘制图像中的轮廓,这对于...
边缘检测算法如Sobel、Canny和Prewitt,用于找出图像中不同区域的边界。 在“左力”这个标签下,可能指的是作者或者编者的姓氏,暗示了该资源的作者。左力可能是这本关于数字图像处理书籍的作者或主要贡献者,他/她...