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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里寫目錄標題

        • 一、常(裝)見(逼)的位操作
          • 先看幾個有意思的位操作:
          • 1、判斷奇數偶數
          • 2、交換兩個數字
          • 3、找出沒有重復的數字
          • 4、m的n次方
          • 5、判斷一個數是不是二的指數
          • 6、找出不大于N的最大2的冪指數
        • 二、leetcode解題
          • 136.只出現一次的數字(簡單)
          • 191.位1的個數(簡單)

看完本文,可以順便解決leetcode以下兩個題目:
136.只出現一次的數字(簡單)
191.位1的個數(簡單)

一、常(裝)見(逼)的位操作

先看幾個有意思的位操作:

或操作 | 和空格將英文字符轉換為小寫,小寫本身還是小寫

(‘a’ | ’ ') = ‘a’
(‘A’ | ’ ') = ‘a’

與操作 & 和下劃線將英文字符轉換為大寫,大寫本身還是大寫

(‘b’ & ‘’) = ‘B’
(‘B’ & '’) = ‘B’

n&(n-1) 消除數字 n 的二進制表示中的最后一個 1

異或^和空格進行英文字符大小寫互換;判斷異號

(‘d’ ^ ’ ') = ‘D’
(‘D’ ^ ’ ') = ‘d’
x^y < 0;異號,否則同號

下面我們從簡單開始,一步一步的實現復雜的位運算~

1、判斷奇數偶數

看到這個,你肯定覺得很簡單,然后隨手寫下:

if (n % 2 == 0) { // 偶數 } else { // 奇數 }

其實使用位運算,可以這樣寫

if ( n & 1 == 1) {// 奇數 } else {// 偶數 }

因為如果一個二進制表示偶數的話

偶數的最后一位肯定是0;

奇數的最后一位肯定是1;

2、交換兩個數字

這個也是很常見的操作,很簡單的就可以寫下來:

temp = x; x = y; y = temp;

但是如果在實際工作中,遇到不借助輔助空間,依舊讓你去交換兩個數字呢?
這個時候,位運算的優勢就體現出來了
位運算實現如下:

x = x^y y = x^y x = x^y

看的第一眼,肯定很懵~ 啥玩意兒這是

首先,我們需要知道兩個個基礎的公式:

n^n =0; 即相同的兩個數異或結果是0
n^0 = n;一個數和0異或的結果是本身

所以,上面展開一下,就是

x = x^y y = x^y^y = x^0 = x x = x^y = x^y^x = x^x^y = 0^y = y
3、找出沒有重復的數字

我們以上面的為基礎,即相同的兩個數異或結果是0;一個數和0異或的結果是本身
那我們就把這一些數字,遍歷一遍,全部異或一下,不就OK了?

4、m的n次方

要求一個數m的n次方,但是不能使用POW函數,如何做?
不要使用 m x m x m x m x m~ 一直乘以n次,太low了;
時間復雜度就是 O(n)

使用階乘,復雜度可以降低到O(log N)

int pow(int n){int sum = 1;int tmp = m;while(n != 0){if(n & 1 == 1){sum *= tmp;}tmp *= tmp;n = n >> 1;}return sum; }

上述代碼要是不理解二進制可能你就看不懂,這里我來舉例解釋一下

比如,求m的 5次方
我們把5用二進制表示,就是 0101,
從右往左看,第一個1 代表一個m
第二個1代表一個m x m x m x m ;
當二進制的這一位有1的時候,才把該位置代表的累乘的數算上,否則不算,繼續看下一位的情況;

5、判斷一個數是不是二的指數

如果一個數,是二的指數,那么它的二進制表示,肯定只有一個1
結合上面說到的:n&(n-1) 消除數字 n 的二進制表示中的最后一個 1

問題就好解決了

return (n > 0 ) && (n & (n - 1) == 0) ) ;
6、找出不大于N的最大2的冪指數

假設這個數是 19;
19用二進制表示就是 00010011
我們需要的結果就是 16 ;00010000
也就是 把 0010011,只保留最左邊的一個1;
這個思路很簡單,就是把最左邊的1后面位,全部變成1;然后整體加1;由于加1之后會進位,所以在整體右移一位


應該怎么最左邊的1后面位,全部變成1呢?

n |= n >> 1;
n |= n >> 2;
n |= n >> 4;

n |= n >> 1;
結果是最左邊的1和其右邊,也會有一個1;11

n |= n >> 2;
結果是最左邊的11和其右邊,也會有一個11;1111

n |= n >> 4;
結果是最左邊的1111和其右邊,也會有一個11;11111111

如此這樣,后面就都變成1了,然后+1,右移一位就行

二、leetcode解題

136.只出現一次的數字(簡單)

這個題剛剛上面說過了,全部都異或
直接上答案;

class Solution { public:int singleNumber(vector<int>& nums) {//異或int n=nums.size();int res=0;for(int i=0;i<n;i++){res^=nums[i];}return res;} };
191.位1的個數(簡單)


思路:
只需要記得:
n&(n-1) 消除數字 n 的二進制表示中的最后一個 1

class Solution { public:int hammingWeight(uint32_t n) {int res = 0;while (n != 0) {n = n & (n - 1);res++;} return res;} };

總結

以上是生活随笔為你收集整理的位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久草精品国产 | 秋霞福利影院 | 影音先锋亚洲精品 | 国产毛片久久久久久国产毛片 | 国产高清视频网站 | 色综合a | 日本美女久久久 | 日韩中文字幕2019 | 伊人成人在线视频 | 在线视频这里只有精品 | 欧美人与性禽动交精品 | 伊人青青草视频 | 欧美成年人网站 | 色婷婷激情五月 | 91亚洲国产成人精品一区二区三 | 亚洲精品1区2区3区 国产丝袜网站 | 欧美色乱 | 天天操综合网 | 日本高清免费视频 | 在线超碰 | 91精品国产综合久久久久久 | 国产在线拍揄自揄拍 | 少妇人妻综合久久中文字幕 | 岛国精品在线 | 国产三级精品视频 | 久久国产香蕉视频 | 看片一区| 国产精品suv一区二区88 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 丰满人妻一区二区三区大胸 | 无码人妻丰满熟妇啪啪欧美 | 国产精品久久久久久久久久久久久久久久久 | avtt亚洲天堂 | 亚洲夜夜操 | 精品无码一区二区三区免费 | 一级少妇精品久久久久久久 | 免费黄色a| 私密视频在线观看 | 一级黄色片大全 | 一本一道无码中文字幕精品热 | 亚洲中文字幕无码一区二区三区 | av在线资源观看 | 超碰在线综合 | 亚洲综合在线播放 | 99热精品在线播放 | 久久精品屋 | 日本高清不卡码 | 国产精品二区视频 | mm131在线 | 天天碰天天碰 | 亚洲性在线| 午夜在线视频免费观看 | 亚洲中文无码久久 | 国产图区 | 黑丝美女av| 日韩免费一级片 | 国产日韩一区二区三区 | 国产精品入口 | 欧美少妇网 | 亚洲精品成人无码熟妇在线 | 国产尤物av | 日韩精品亚洲一区 | 99国产精品国产精品九九 | 日本精品视频一区二区 | 中文字幕理伦片免费看 | 香蕉国产在线 | 青青伊人精品 | 中文字幕第12页 | 午夜男人天堂 | 国产探花一区 | 久久在线播放 | 欧美二区在线观看 | 少妇高潮久久久久久潘金莲 | 日韩电影一区二区三区 | 中文字幕人妻无码系列第三区 | 久久精久久 | 国家队动漫免费观看在线观看晨光 | 欧美福利片在线观看 | 韩日视频 | 国产一级久久久久毛片精品 | 国产精品毛片久久久久久久av | 成人做爰69片免费看 | 国产成人免费av一区二区午夜 | 欧美精品乱码99久久蜜桃 | 欧美日韩首页 | 五月婷婷丁香久久 | 视频一二三区 | 99热在线观看精品 | 日本xxx高清 | 欧美大片xxx | 欧美日韩不卡合集视频 | 尤物视频免费在线观看 | 91学生片黄 | 亚洲不卡中文字幕 | 亚洲第一二三区 | 雪白的扔子视频大全在线观看 | 黄色三级小说 | 欧美精品第1页 | 亚洲免费精品 |