首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请解释这个在1.N中找到缺失数的过程。

请解释这个在1.N中找到缺失数的过程。
EN

Stack Overflow用户
提问于 2020-03-31 13:53:38
回答 2查看 548关注 0票数 0

我们得到了一个n-1整数的列表,这些整数在1到n的范围内,列表中没有重复。列表中缺少一个整数。我们得找到失踪的号码。这就是问题所在。

我的方法是获取来自1.N的所有元素的XOR和数组中的所有元素,然后输出XOR。它工作的很好,但我找到了另一个解决方案,在极客为极客,但我无法理解什么和为什么要这样做。

方法:我们可以从已知数字中选择一个数字,并从给定的数字中减去一个数字。

代码语言:javascript
复制
#include <bits/stdc++.h> 
using namespace std; 

// a represents the array 
// n : Number of elements in array a 
int getMissingNo(int a[], int n)  
{  
    int i, total=1;  

for ( i = 2; i<= (n+1); i++) 
{ 
    total+=i; 
    total -= a[i-2]; 
} 
return total;  
}  

//Driver Program 
int main() { 
    int arr[] = {1, 2, 3, 5}; 
    cout<<getMissingNo(arr,sizeof(arr)/sizeof(arr[0])); 
    return 0; 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 14:02:32

代码语言:javascript
复制
int i, total=1; 

由于我们已将总计声明为整数,如果加法超出整数上限,则在添加所有数字时可能会出现溢出。

因此,为了克服这个问题,我们同时从总数中添加(从1到N)和减去(数组a[]的元素)。

代码语言:javascript
复制
for ( i = 2; i<= (n+1); i++) 
{ 
    total+=i; 
    total -= a[i-2]; // This will reduce the total so that overflow does not happen.
} 
票数 3
EN

Stack Overflow用户

发布于 2020-03-31 13:57:29

使用求和公式:

I=1至N=N* (N + 1) /2的和

https://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF

添加列表中的数字。从数字之和中减去这个值,你就会得到你丢失的数字。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60952266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档