国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法通關(guān)村第11關(guān)【黃金】| 用4KB內(nèi)存尋找重復(fù)元素

這篇具有很好參考價(jià)值的文章主要介紹了算法通關(guān)村第11關(guān)【黃金】| 用4KB內(nèi)存尋找重復(fù)元素。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目要求:給定一個(gè)數(shù)組,包含從1到N的整數(shù),N最大為32000,數(shù)組可能還有重復(fù)值,且N的取值不定,若只有4KB的內(nèi)存可用,該如何打印數(shù)組中所有重復(fù)元素。

思路:

直接用大小為32000的int數(shù)組來標(biāo)記對(duì)應(yīng)下標(biāo)下的值出現(xiàn)次數(shù),但是空間大小是32000*4B超過了4KB

這里采用一種壓縮空間的方式——位圖,每一位表示對(duì)應(yīng)的一個(gè)整數(shù),用32000位就能代表32000個(gè)整數(shù),直接每個(gè)元素節(jié)省了一個(gè)int大小也就是4B的空間。

初始化數(shù)組時(shí):this.bitset = new int[size >> 5]? =>?每32縮小一個(gè)int大小

set時(shí):先獲取pos除以32的整數(shù)部分,再獲取pos除以32的余數(shù)

例如34,先34>>5等于1,再34&(11111)等于2(00010),對(duì)應(yīng)bitset[1]中的第2位

bitset[0]對(duì)應(yīng)1-32

bitset[1]對(duì)應(yīng)33-64

這樣就能每一個(gè)bitset用32位表示32個(gè)int文章來源地址http://www.zghlxwxcb.cn/news/detail-703448.html

public class FindDuplicatesIn32000 {
    public void checkDuplicates(int[] array) {
        BitSet bs = new BitSet(32000);
        for (int i = 0; i < array.length; i++) {
            int num = array[i];
            int num0 = num - 1;
            if (bs.get(num0)) {
                System.out.println(num);
            } else {
                bs.set(num0);
            }
        }
    }

    class BitSet {
        int[] bitset;

        public BitSet(int size) {
            this.bitset = new int[size >> 5];
        }

        boolean get(int pos) {
            int wordNumber = (pos >> 5);
            int bitNumber = (pos & 0x1F);
            return (bitset[wordNumber] & (1 << bitNumber)) != 0;
        }

        void set(int pos) {
            int wordNumber = (pos >> 5);
            int bitNumber = (pos & 0x1F);
            bitset[wordNumber] |= 1 << bitNumber;
        }
    }
}

到了這里,關(guān)于算法通關(guān)村第11關(guān)【黃金】| 用4KB內(nèi)存尋找重復(fù)元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法通關(guān)村第十六關(guān):黃金挑戰(zhàn):滑動(dòng)窗口與堆結(jié)合

    堆的大小一般是有限的,能直接返回當(dāng)前位置下的最大值或者最小值 該特征與滑動(dòng)窗口結(jié)合,可以解決一些特定場(chǎng)景的問題 1. 滑動(dòng)窗口與堆問題的結(jié)合 LeetCode239 https://leetcode.cn/problems/sliding-window-maximum/ 思路分析 對(duì)于最大值,K個(gè)最大這種場(chǎng)景,優(yōu)先隊(duì)列(堆)是首先該考慮的

    2024年02月09日
    瀏覽(17)
  • [Go版]算法通關(guān)村第十二關(guān)黃金——字符串沖刺題

    [Go版]算法通關(guān)村第十二關(guān)黃金——字符串沖刺題

    題目鏈接:LeetCode-14. 最長(zhǎng)公共前綴 以第一個(gè)子字符串為標(biāo)準(zhǔn),遍歷其每個(gè)字符時(shí),內(nèi)嵌遍歷其余子字符串的對(duì)應(yīng)字符是否一致。不一致時(shí),則返回當(dāng)前字符之前的子字符串。 復(fù)雜度:時(shí)間復(fù)雜度 O ( n ? m ) O(n*m) O ( n ? m ) 、空間復(fù)雜度 O ( 1 ) O(1) O ( 1 ) 時(shí)間復(fù)雜度:其中 n

    2024年02月12日
    瀏覽(22)
  • [Go版]算法通關(guān)村第十五關(guān)黃金——繼續(xù)研究超大規(guī)模數(shù)據(jù)場(chǎng)景的問題

    [Go版]算法通關(guān)村第十五關(guān)黃金——繼續(xù)研究超大規(guī)模數(shù)據(jù)場(chǎng)景的問題

    在 海量數(shù)據(jù) 中,此時(shí)普通的數(shù)組、鏈表、Hash、樹等等結(jié)構(gòu)有無效了 ,因?yàn)閮?nèi)存空間放不下了。而常規(guī)的遞歸、排序,回溯、貪心和動(dòng)態(tài)規(guī)劃等思想也無效了,因?yàn)閳?zhí)行都會(huì)超時(shí),必須另外想辦法。這類問題該如何下手呢?這里介紹三種非常典型的思路: 使用位存儲(chǔ) ,使用

    2024年02月10日
    瀏覽(17)
  • 算法通關(guān)村第一關(guān)------鏈表經(jīng)典問題之尋找第一個(gè)公共子結(jié)點(diǎn)

    算法通關(guān)村第一關(guān)------鏈表經(jīng)典問題之尋找第一個(gè)公共子結(jié)點(diǎn)

    哈希和集合 棧 拼接兩個(gè)字符串 同步相消 1、哈希和集合法: ????????將一個(gè)鏈表存入Map(或者集合)中,然后遍歷第二個(gè)鏈表,在遍歷的同時(shí),檢查在Hash(或者集合)中是否包含此節(jié)點(diǎn)。 ?2、棧方法: ? ? ? ? 主要思想:棧是后進(jìn)先出原則,stack.peek()方法每次比較棧頂

    2024年02月12日
    瀏覽(27)
  • [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問題之?dāng)?shù)論問題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問題之?dāng)?shù)論問題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    題目鏈接:LeetCode-1979. 找出數(shù)組的最大公約數(shù) 輾轉(zhuǎn)相除法其核心部分為:若r 是a ÷ b的余數(shù),則 gcd(a, b)=gcd(b, r) 題目鏈接:LeetCode-204. 計(jì)數(shù)質(zhì)數(shù) 如果 x 是質(zhì)數(shù),那么大于 x 的 x 的倍數(shù) 2x,3x,… 一定不是質(zhì)數(shù)。 時(shí)間復(fù)雜度分析: 外層循環(huán)的迭代次數(shù)是 n-2,即 O ( n ) O(n) O ( n ) 次

    2024年02月11日
    瀏覽(24)
  • 算法通關(guān)村第十五關(guān)——從10億數(shù)字中尋找最小的100萬個(gè)數(shù)字

    本題有三種常用的方法,一種是先排序所有元素,然后取出前100萬個(gè)數(shù),該方法的時(shí)間復(fù)雜度為O(nlogn)。很明顯對(duì)于10億級(jí)別的數(shù)據(jù),這么做時(shí)間和空間代價(jià)太高。 第二種方式是采用選擇排序的方式,首先遍歷10億個(gè)數(shù)字找最小,然后再遍歷一次找第二小,然后再一次找第三小

    2024年02月11日
    瀏覽(34)
  • 算法通關(guān)村第一關(guān)——鏈表經(jīng)典問題之尋找兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)

    算法通關(guān)村第一關(guān)——鏈表經(jīng)典問題之尋找兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)

    這是一道經(jīng)典的鏈表問題,來自劍指offer52,題目是這樣的:輸入兩個(gè)鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn),如下圖所示: 兩個(gè)鏈表的頭結(jié)點(diǎn)均已知,相交之后成為一個(gè)單鏈表,但是相交的位置未知,并且相交之前的結(jié)點(diǎn)數(shù)也是未知的,請(qǐng)?jiān)O(shè)計(jì)算法找到兩個(gè)鏈表的合并點(diǎn)。 第一

    2024年02月16日
    瀏覽(20)
  • 算法通關(guān)村——?jiǎng)h除元素專題

    算法通關(guān)村——?jiǎng)h除元素專題

    LeetCode27.給你一個(gè)數(shù)組nums和一個(gè)值val,你需要原地移除所有數(shù)值等于val的元素,并返回移除后數(shù)組的新長(zhǎng)度。要求:不要使用額外的數(shù)組空間,你必須僅使用? O(1) ?額外空間并? 原地?修改輸入數(shù)組 。元素的順序可以改變。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。 示例

    2024年02月13日
    瀏覽(23)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode287. 尋找重復(fù)數(shù)

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode287. 尋找重復(fù)數(shù)

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 弗洛伊德判圈法,也就是快慢指針判圈法(龜兔賽跑算法),此算法分為兩個(gè)步驟 判斷是否有環(huán),并得到快慢指針相遇

    2024年01月24日
    瀏覽(27)
  • 算法通關(guān)村第十四關(guān)——解析堆在數(shù)組中找第K大的元素的應(yīng)用

    算法通關(guān)村第十四關(guān)——解析堆在數(shù)組中找第K大的元素的應(yīng)用

    力扣215題 , 給定整數(shù)數(shù)組nums和整數(shù)k,請(qǐng)返回?cái)?shù)組中第k個(gè)最大的元素。 請(qǐng)注意,你需要找的是數(shù)組排序后的第k個(gè)最大的元素,而不是第k個(gè)不同的元素。 分析 :按照“找最大用小堆,找最小用大堆,找中間用兩個(gè)堆”,這道題用最小堆來解決,構(gòu)造一個(gè)大小只有K的最小堆

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包