日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

02-异或算法

發(fā)布時間:2023/11/16 windows 41 coder
生活随笔 收集整理的這篇文章主要介紹了 02-异或算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2. 異或算法

2.1 異或基礎(chǔ)

  1. 0^N == N N^N == 0;
  2. 記為無進位相加即可,1+1 = 0;
  3. 異或運算滿足交換律和結(jié)合。

2.1.1 不用額外變量交換兩個數(shù)

解法:aba = b,abb = a。

2.1.2 找出現(xiàn)奇數(shù)次的數(shù)

1. 題目

? 一個數(shù)組中有一種數(shù)出現(xiàn)了奇數(shù)次,其他數(shù)都出現(xiàn)了偶數(shù)次,怎么找到并打印這種數(shù)。

2. 思路

? 數(shù)組里每個元素都異或,兩兩相消,就只剩下奇數(shù)次的那個數(shù)

3. 代碼

public static void main(String[] args) {
    int[] arr = {1,3,4,1,3,4,1,3,4,5,1,3,4};
    int ans = 0;
    for (int i = 0; i < arr.length; i++) {
        ans ^= arr[i];
    }
    System.out.println(ans);
}

2.2 提取右側(cè)(最低位)的1

1. 題目

? 怎么把一個int類型的數(shù),提取出最右側(cè)(最低位)的1來

2. 思路

1. 取反加一再和原來相與 a&(~a+1)

? 取反:這樣每一位都不一樣,之前的0位置都變成了1,假設(shè)此時的值為b。

? 加一:這樣在右面+1就可以讓他一直進位直到第一個0(也就是沒取反的時候的1的位置),假設(shè)此時值為c。

? 相與:此時c的狀態(tài)是最低的1往右的值都是0,最低一位的1的位置和a相同,這一位再往右每一個都是不一樣的,所以相與之后,直接就可以得到結(jié)果。

注意: ~a+1 就等于-a,所以也可以寫成a&(-a)

2. 直接暴力

? 先找位置,然后再把1右移

3. 代碼

取反加一:

System.out.println((a&(~a+1)));
System.out.println((a&(-a)));

暴力:

private static int findRightest(int a) {
    int rightPos = 0;
    // 找最低位的1
    for(int i = 0; i < 32; i++){
        if((a & 1) == 1){
            rightPos = i;
            break;
        }
        a = a>>1;
    }

    a = 1;
    // 右移
    for (int i = 0; i < rightPos; i++) {
        a = a << 1;
    }
    System.out.println(a);
    return a;
}

2.3 找到兩種奇數(shù)數(shù)

1. 題目

一個數(shù)組中有兩種數(shù)出現(xiàn)了奇數(shù)次,其他數(shù)都出現(xiàn)了偶數(shù)次,怎么找到并打印這兩種數(shù)

2. 思路

? 全部異或,只留下eor = a^b

? 因為a != b,所以二進制的ab至少有一位不一樣,即eor != 0,也就是至少存在一位為1。

? 既然有一位為1,代表a,b在這一位不同(異或:同0異1),那么就可以通過這一位來區(qū)分數(shù)組。

? 這一位為0的放一邊,為1的放一邊,分別異或,這樣得到的數(shù)就可以區(qū)分出來ab了。

只要是eor有一位為1就可以區(qū)分,具體是哪個無所謂,所以不妨設(shè)是最右側(cè)的一個。

3. 代碼

private static int[] getAB(int[] arr) {
    // 先異或,得到eor=a^b;
    int eor = 0;
    for (int i = 0; i < arr.length; i++) {
        eor ^= arr[i];
    }
    // 對于ab,最右側(cè)一位的1提取出來
//        System.out.println(eor);
    int rightest = eor&(-eor);
//        System.out.println(rightest);
    // 根據(jù)這一位來區(qū)分屬于誰
    // 不妨設(shè)a在這位為0,b在這位為1
    int[] ans = new int[2];
    for (int i = 0; i < arr.length; i++) {
        if((arr[i] & rightest) == 0){
            ans[0] ^= arr[i];
        }else{
            ans[1] ^= arr[i];
        }
    }
    return ans;
}

2.4 找到出現(xiàn)k次的數(shù)

1. 題目

? 一個數(shù)組中有一種數(shù)出現(xiàn)K次,其他數(shù)都出現(xiàn)了M次,M > 1, K < M,

? 要求:找到出現(xiàn)了K次的數(shù),額外空間復(fù)雜度O(1),時間復(fù)雜度O(N)

2. 思路

? 利用長度為32的數(shù)組,記錄下每一位置出現(xiàn)1的次數(shù),模M除K就得到二進制的所求數(shù),再轉(zhuǎn)為十進制。

3. 代碼

private static int findKTimes(int[] arr, int m, int k) {
    int[] times = new int[32];
    // 記錄所有數(shù)的32位的出現(xiàn)的次數(shù)
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < times.length; j++) {
            if((arr[i]&(1<<j)) != 0){
                times[j] ++;
            }
        }
    }
//        Arrays.stream(times).forEach(System.out::println);
    // 所有數(shù)%m/k 得到的數(shù)組合成int
    int ans = 0;
    for (int i = 0; i < times.length; i++) {
        times[i] = times[i]%m/k;
    }

    // 組合成int
    for (int i = 0; i < times.length; i++) {
        // cur = 1 1 0 1
        // times = 1 0 1 1
        ans += (times[i]<<i);
    }
    return ans;
}

總結(jié)

以上是生活随笔為你收集整理的02-异或算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产999 | 日本成人社区 | 国产乱码精品一区二区三区亚洲人 | 91传媒视频在线观看 | 懂色av蜜臀av粉嫩av分享吧 | 99热视 | 日本人妻伦在线中文字幕 | 免费成人结看片 | 91在线资源 | 我和岳m愉情xxxⅹ视频 | 亚洲网址在线 | 人人看人人做 | 日韩欧美亚洲国产精品字幕久久久 | 99er精品视频| 国产麻豆精品在线观看 | 亚洲av无码一区二区乱子伦 | 久久精品国产99国产 | 亚洲视频一区二区在线观看 | 伊人午夜| 国产91福利 | 成人免费网站视频 | 337p亚洲精品色噜噜狠狠 | 日韩三级一区 | 国产手机av在线 | 色香天天| 中文字幕久久熟女蜜桃 | 青青伊人久久 | 国产专区视频 | 99热这里是精品 | 九色porn| 精品女同一区二区三区 | 九色视频国产 | 亚洲男人天堂2018 | 自拍三级 | 黄色一级图片 | 国产精品theporn88 | 欧美人妻一区二区 | 天堂视频中文在线 | 久久人体视频 | 国产欧美日韩一区二区三区 | 亚洲伊人av | 欧美日本韩国一区二区 | 波多野结衣免费观看视频 | 夜夜骚av一区二区三区 | av在线播放观看 | 欧美顶级毛片在线播放 | 色很久| 色老头免费视频 | av天天有| 少妇人妻精品一区二区三区 | 亚洲av网址在线 | 三级小视频在线观看 | 女生被男生c | 四虎网址大全 | 在线观看欧美日韩视频 | www.天天综合 | 精品一区二区视频在线观看 | 国产亚洲黄色片 | 高清欧美精品xxxxx在线看 | 亚洲国产精品99久久 | 日韩高清影视在线观看 | 国产天天综合 | 另类av小说 | 亚洲精品男人天堂 | 男女超碰| 欧美在线性爱视频 | 黑人100部av解禁片 | 日韩精品中文字幕一区 | 亚洲成人中文字幕在线 | 亚洲天堂毛片 | 国产福利专区 | 日韩在线观看免费高清 | 天天干网址 | 国产美女在线精品 | 不许穿内裤随时挨c调教h苏绵 | 先锋影音在线 | 国产在线午夜 | 欧美日韩国产精品一区 | 国产熟妇一区二区三区aⅴ网站 | 亚洲综合一区二区三区 | 91av国产视频| 国产福利一区二区视频 | 国产精品久久..4399 | 亚洲AV乱码国产精品观看麻豆 | 欧美日韩精品区 | 国产精品美女一区二区三区 | 国产精品国产一区二区三区四区 | 老局长的粗大高h | 99精品国产成人一区二区 | 亚洲黄页 | 久久精视频 | 91成人免费在线视频 | 一级免费看片 | 另类小说婷婷 | 亚洲一区二区三区观看 | 欧美日韩成人一区二区 | jlzzjlzz亚洲日本少妇 | 福利一二三区 | 欧美性猛交久久久乱大交小说 |