LintCode-落单的数 III
生活随笔
收集整理的這篇文章主要介紹了
LintCode-落单的数 III
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給出2*n + 2個(gè)的數(shù)字。除當(dāng)中兩個(gè)數(shù)字之外其它每一個(gè)數(shù)字均出現(xiàn)兩次,找到這兩個(gè)數(shù)字。
您在真實(shí)的面試中是否遇到過(guò)這個(gè)題?? Yes 例子給出?[1,2,2,3,4,4,5,3]。返回 1和5
挑戰(zhàn)O(n)時(shí)間復(fù)雜度,O(1)的額外空間復(fù)雜度
標(biāo)簽?Expand??相關(guān)題目?Expand?
分析:這樣的抖靈巧的題要是面試官面我,我肯定會(huì)批判一番的!把全部數(shù)亦或下,得到的數(shù)能夠求出兩不同數(shù)的亦或值,這樣能夠找到一個(gè)位,在該位上能夠把全部數(shù)分成兩部分。沒(méi)部分能夠套用之前的“全部數(shù)都出現(xiàn)兩次,除了當(dāng)中一個(gè)數(shù)”的代碼。
代碼:
class Solution { public:/*** @param A : An integer array* @return : Two integers*/vector<int> singleNumberIII(vector<int> &A) {// write your code hereint k = findFirstDiffBit(A);int ret1 = findOne(A, k, true);int ret2 = findOne(A, k, false);vector<int> ret;ret.push_back(ret1);ret.push_back(ret2);return ret;}int findFirstDiffBit(vector<int>& A){int x = 0;for (auto i : A)x ^= i;for (int i = 0;i<32;i++){if ((1 << i)&x)return i;}}int findOne(vector<int>&A, int k, bool first){int ret = 0;for (auto x : A){if (first){if ((1 << k)&x)ret ^= x;}else{if (((x>>k)&1) == 0)ret ^= x;}}return ret;} };總結(jié)
以上是生活随笔為你收集整理的LintCode-落单的数 III的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Chipscope使用
- 下一篇: 在制造业中推进机器人技术的五种方法