From cd51fcf2b62b7a242d3d21949254e1a233207d76 Mon Sep 17 00:00:00 2001
From: Victor Wu
Date: Wed, 11 Nov 2020 14:02:23 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90268.=20=E4=B8=A2=E5=A4=B1=E7=9A=84?=
=?UTF-8?q?=E6=95=B0=E5=AD=97=E3=80=91=E3=80=90C++=E3=80=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
高频面试系列/消失的元素.md | 47 ++++++++++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)
diff --git a/高频面试系列/消失的元素.md b/高频面试系列/消失的元素.md
index 844b5cb..50556ba 100644
--- a/高频面试系列/消失的元素.md
+++ b/高频面试系列/消失的元素.md
@@ -132,4 +132,49 @@ public int missingNumber(int[] nums) {
-======其他语言代码======
\ No newline at end of file
+======其他语言代码======
+
+[happy-yuxuan](https://github.com/happy-yuxuan) 提供 三种方法的 C++ 代码:
+
+```c++
+// 方法:异或元素和索引
+int missingNumber(vector& nums) {
+ int n = nums.size();
+ int res = 0;
+ // 先和新补的索引异或一下
+ res ^= n;
+ // 和其他的元素、索引做异或
+ for (int i = 0; i < n; i++)
+ res ^= i ^ nums[i];
+ return res;
+}
+```
+
+```c++
+// 方法:等差数列求和
+int missingNumber(vector& nums) {
+ int n = nums.size();
+ // 公式:(首项 + 末项) * 项数 / 2
+ int expect = (0 + n) * (n + 1) / 2;
+ int sum = 0;
+ for (int x : nums)
+ sum += x;
+ return expect - sum;
+}
+```
+
+```c++
+// 方法:防止整型溢出
+int missingNumber(vector& nums) {
+ int n = nums.size();
+ int res = 0;
+ // 新补的索引
+ res += n - 0;
+ // 剩下索引和元素的差加起来
+ for (int i = 0; i < n; i++)
+ res += i - nums[i];
+ return res;
+}
+```
+
+