日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C++(后臺(tái)開發(fā)面試題)

 lifei_szdz 2019-03-07

今天進(jìn)行了今日頭條一輪的技術(shù)面試,面試官問了這樣一道題,給定一個(gè)數(shù)組,長度為n,數(shù)組中的元素均為整數(shù),范圍是[0,n-1],問如何判斷數(shù)組中是否出現(xiàn)重復(fù)數(shù)字。
這道題不算難,如果對(duì)時(shí)間復(fù)雜度和空間復(fù)雜度沒有要求的話,那就直接使用二重循環(huán)進(jìn)行遍歷,代碼如下:時(shí)間復(fù)雜度為O(n^2)

bool repeat(vector<int> &v) {
    for (int i = 0; i < v.size(); i++) {
        for (int j = i + 1; j < v.size(); j++) {
            if (v[j] == v[i]) return true;
        }
    }
    return false;
}

當(dāng)然這是最暴力的方法,為了將時(shí)間復(fù)雜度降到O(n),想再定義一個(gè)大小為n的向量用于記錄數(shù)組元素出現(xiàn)的次數(shù)進(jìn)行判斷,空間復(fù)雜度為O(n)

bool repeat(vector<int> &v) {
    vector<int> count(v.size(), 0);
    for (int i = 0; i < v.size(); i++) {
        if (count[v[i]] == 1) return true;
        count[v[i]] == 1;
    }
    return false;
}

然后面試官就問能不能在時(shí)間復(fù)雜度不變的情況下使空間復(fù)雜度降低。
于是想到這個(gè)數(shù)組的元素是比較特殊的,假如不存在重復(fù)元素排序后的的數(shù)組會(huì)是連續(xù)的,也即第i個(gè)元素是數(shù)字i-1,但是如果使用常用的排序方法,時(shí)間復(fù)雜度至少為O(nlogn),所以這里需要利用到數(shù)組的特殊性進(jìn)行排序,即將數(shù)字i-1交換到數(shù)組中第i個(gè)位置。
代碼實(shí)現(xiàn)如下:時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)

bool repeat(vector<int> &v) {
    for (int i = 0; i < v.size(); i++) {
        while (v[i] != i){
            int temp = v[i];
            if (v[i] == v[temp]) return true;
            else {
                int t = v[i];
                v[i] = v[temp];
                v[temp] = t;
            }
        }
    }
    return false;
}

記錄一下……

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多