国产探花免费观看_亚洲丰满少妇自慰呻吟_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; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁阳县| 凤城市| 七台河市| 玛纳斯县| 古丈县| 英德市| 克拉玛依市| 衡阳市| 黄平县| 蛟河市| 咸宁市| 历史| 龙井市| 疏附县| 宁波市| 盐津县| 蒲江县| 蓬安县| 万宁市| 天长市| 镇宁| 弥勒县| 如皋市| 山丹县| 横峰县| 云阳县| 太仆寺旗| 万荣县| 江安县| 岳阳县| 新龙县| 蓬莱市| 鄂托克旗| 梁山县| 张掖市| 榆社县| 永靖县| 荔浦县| 铅山县| 绵阳市| 双柏县|