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

算法通關(guān)村——位運(yùn)算在查找重復(fù)元素中的妙用

這篇具有很好參考價(jià)值的文章主要介紹了算法通關(guān)村——位運(yùn)算在查找重復(fù)元素中的妙用。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

用4KB內(nèi)存尋找重復(fù)元素

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

如果不要求使用4KB,最簡單就是使用N長的數(shù)組然后將元素都存入數(shù)組,再打印,但是題目規(guī)定了4KB,很顯然這種做法就不大行了,一定會超出時(shí)間限制。

4KB=4 * 8 * 2 ^ 10 比特,這個(gè)值是大于32000,可以使用比特?cái)?shù)組來存儲相應(yīng)的元素。利用這個(gè)位向量,就可以遍歷訪問整個(gè)數(shù)組。如果發(fā)現(xiàn)數(shù)組元素是v,那么就將位置為v的設(shè)置為1,碰到重復(fù)元素,就輸出。代碼就沒什么可說的,真要實(shí)現(xiàn)起來,還是有一點(diǎn)復(fù)雜的。文章來源地址http://www.zghlxwxcb.cn/news/detail-683757.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);//除以32
            int bitNumber = (pos & 0x1F);//除以32
            return (bitset[wordNumber] & (1 << bitNumber)) != 0;
        }

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

到了這里,關(guān)于算法通關(guān)村——位運(yùn)算在查找重復(fù)元素中的妙用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 算法通關(guān)村——二分查找在二叉樹中的應(yīng)用

    二叉搜索樹中的搜索 給定二叉搜索樹(BST)的根節(jié)點(diǎn) root 和一個(gè)整數(shù)值 val。 你需要在 BST 中找到節(jié)點(diǎn)值等于 val 的節(jié)點(diǎn)。 返回以該節(jié)點(diǎn)為根的子樹。 如果節(jié)點(diǎn)不存在,則返回 null 。 一開始以為很難,無從下手,但是題目已經(jīng)規(guī)定了這是二叉搜索樹,意味著將元素按照中序排

    2024年02月13日
    瀏覽(14)
  • 算法第四十一天-排除排序鏈表中的重復(fù)元素Ⅱ

    算法第四十一天-排除排序鏈表中的重復(fù)元素Ⅱ

    題意:在一個(gè) 有序 鏈表中,如果一個(gè)節(jié)點(diǎn)的值出現(xiàn)不止一次,那么把這個(gè)節(jié)點(diǎn)刪除掉 重點(diǎn): 有序鏈表 ,所以,一個(gè)節(jié)點(diǎn)的值出現(xiàn)不止一次,那么他們必相鄰。 方法一:遞歸 鏈表和樹的問題,一般都可以有遞歸和迭代兩種寫法。對于本題一定要記住是有序鏈表,值相同的節(jié)

    2024年04月11日
    瀏覽(16)
  • 算法leetcode|83. 刪除排序鏈表中的重復(fù)元素(rust重拳出擊)

    算法leetcode|83. 刪除排序鏈表中的重復(fù)元素(rust重拳出擊)

    給定一個(gè)已排序的鏈表的頭 head , 刪除所有重復(fù)的元素,使每個(gè)元素只出現(xiàn)一次 。返回 已排序的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目在范圍 [0, 300] 內(nèi) -100 = Node.val = 100 題目數(shù)據(jù)保證鏈表已經(jīng)按升序 排列 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 本來要?jiǎng)h除重復(fù)元素,需要兩次遍

    2024年02月07日
    瀏覽(18)
  • 算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    給定一個(gè)已排序的鏈表的頭 head , 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點(diǎn),只留下不同的數(shù)字 。返回 已排序的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目在范圍 [0, 300] 內(nèi) -100 = Node.val = 100 題目數(shù)據(jù)保證鏈表已經(jīng)按升序 排列 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 這道題目和 83. 刪除排序

    2024年02月08日
    瀏覽(26)
  • 算法每日一題: 刪除排序列表中的重復(fù)元素2 | 循環(huán) | 鏈表的刪除 | 虛擬節(jié)點(diǎn)

    大家好,我是星恒 今天的題目是昨天題目的進(jìn)化題,他對鏈表的刪除加深了理解。最重要的是學(xué)會了對循環(huán)中的特殊部分的處理,還有設(shè)置虛擬節(jié)點(diǎn)的情況 好了,話不多說,我們直接開始 題目:leetcode 82 給定一個(gè)已排序的鏈表的頭 head , 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點(diǎn)

    2024年01月16日
    瀏覽(26)
  • 算法通關(guān)村——透徹理解二分查找

    假設(shè)現(xiàn)在有個(gè)數(shù)組里面有重復(fù)元素,并且按照增序排列,如果有相同元素,返回最左側(cè)的第一個(gè)重復(fù)元素的位置。 核心思路也是比較簡單了,當(dāng)找到第一個(gè)重復(fù)的元素時(shí)候,記錄位置,然后向左移動(dòng),左邊的不是目標(biāo)元素,就意味著左邊沒有重復(fù)的目標(biāo)元素,然后+1就是目標(biāo)

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

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

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

    2024年02月13日
    瀏覽(23)
  • 算法通關(guān)村十一關(guān) | 位運(yùn)算實(shí)現(xiàn)加法和乘法

    在計(jì)算機(jī)中,位運(yùn)算的效率要比加減乘除的效率更高,因此在高性能軟件中源碼中大量使用,計(jì)算機(jī)里各種運(yùn)算基本上都是位運(yùn)算。 學(xué)習(xí)下面內(nèi)容之前建議先學(xué)習(xí)位運(yùn)算規(guī)則:算法通關(guān)村十一關(guān) | 位運(yùn)算的規(guī)則_我愛學(xué)算法的博客-CSDN博客 題目: LeetCode371 給你兩個(gè)整數(shù)a和b,

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

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

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

    2024年02月07日
    瀏覽(21)
  • (78)刪除有序數(shù)組中的重復(fù)項(xiàng)(79)排序矩陣查找

    水晶簾動(dòng)微風(fēng)起,滿架薔薇一院香。 —高駢- 題目鏈接:刪除有序數(shù)組中的重復(fù)項(xiàng) 給你一個(gè) 非嚴(yán)格遞增排列 的數(shù)組 nums ,請你 原地 刪除重復(fù)出現(xiàn)的元素,使每個(gè)元素 只出現(xiàn)一次 ,返回刪除后數(shù)組的新長度。元素的 相對順序 應(yīng)該保持 一致 。然后返回 nums 中唯一元素的個(gè)

    2024年04月17日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包