题目内容:
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
(进阶: 你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?)
Leetcode题目链接(点击即可跳转):丢失的数字
题目理解:
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
假设 n = 3,也就是说这个数组原本应该有的元素为[0,3],也就是{0,1,2,3}四个元素;
假设n=1,那么数组中的元素应该为{0,1}两个元素。
现在因为某种神秘的原因,导致原本数组中的某个元素丢失了,比如说n=3的时候,2丢失了,那么数组剩下的元素仅有{0,1,3},现在就是要求我们找出这个丢失的数字。
解题思路
思路一:求和做差法
假设n=5,那么数组中的元素应该为{0,1,2,3,4,5}(实际在数组中存放的元素顺序可以为任意的)
若数组中某一个元素丢失了,假设3不见了。
若要求丢失的数字3,
1)我们可以先让原数组(没丢之前)中的内容累加得到和s1(如果数组元素个数为n,那么原数组的内容必然为[0,n],理解这一点很重要)
2)然后让(丢失数字后的)新数组累加得到和s2
3)两者相减 s1 - s2 即可得到丢失的数字
代码实现:
int missingNumber(int* nums