国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Leetcode 268 - Missing Number(等差數列 or 位運算)

2019-11-08 19:25:21
字體:
來源:轉載
供稿:網友

題意

給一個大小為n的數組,里面的元素為[0, n]中缺了一個數字,求缺的那個數字。

要求:

O(n)時間。O(1)空間。

思路

算法1

如果數組包含[1, n]那么它的和為n(n+1)2。那么我們現在只需要對數組求和,兩個相減,得到的就是缺失的那個數字了。

算法2

利用異或。

我們知道^為:1 ^ 1 = 0, 0 ^ 1 = 1

那么,就可以得到這樣兩個結論:

x ^ x = 00 ^ x = x

然后,對于這道題,我們可以另x1 = 0 ^ 1 ^ 2 ^ ....^ nx2 = a[0] ^ a[0] ^...a[n - 1]

最后,我們用x1 ^ x2,可以知道:如果一個數y在a[]中出現過,假設為ak,那么y ^ a[k] = 0

基于這個思想,假設我們沒有出現的數是z,那么我們最后x1 ^ x2的結果即為:0 ^ z = z

代碼

//algorithm1class Solution {public: int missingNumber(vector<int>& nums) { int n = nums.size(); long long sum = 0; long long y = (long long)((n + 1) * n / 2); for (auto x : nums) sum += x; return y - sum; }};//algorithm 2class Solution {public: int missingNumber(vector<int>& nums) { int x1 = 0, x2 = 0, n = nums.size(); for (int i = 0; i < n; i++) { x1 ^= (i + 1); x2 ^= nums[i]; } return x1 ^ x2; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 红安县| 泌阳县| 迁西县| 方正县| 湘潭市| 伊通| 邹平县| 民乐县| 新乐市| 中牟县| 崇义县| 泰州市| 偃师市| 榆树市| 芮城县| 竹北市| 长顺县| 华蓥市| 山阴县| 丰县| 思茅市| 新乐市| 贵溪市| 盈江县| 元江| 张掖市| 罗定市| 永顺县| 平阴县| 株洲市| 侯马市| 正镶白旗| 施秉县| 宝坻区| 泰州市| 汉寿县| 外汇| 吐鲁番市| 贵港市| 孝昌县| 南汇区|