【專題五】位運算(1):常見位運算操作總結

📝前言說明:

  • 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄,按專題劃分
  • 每題主要記錄:(1)本人解法 + 本人屎山代碼;(2)優質解法 + 優質代碼;(3)精益求精,更好的解法和獨特的思想(如果有的話)
  • 文章中的理解僅為個人理解。如有錯誤,感謝糾錯

🎬個人簡介:努力學習ing
📋本專欄:C++刷題專欄
📋其他專欄:C語言入門基礎,python入門基礎,C++學習筆記,Linux
🎀CSDN主頁 愚潤澤

題目

  • 位運算操作總結
  • 191. 位 1 的個數
  • 338. 比特位計數
  • 461. 漢明距離
  • 136. 只出現一次的數字
  • 260. 只出現一次的數字 III


位運算操作總結

第x位:從0下標開始的

  1. 基礎位運算
    • 右移:>>、左移:<<、取反:~、按位與(邏輯與):&、按位或(邏輯或):|、按位異或^(相同為0,相異為1
  2. 給定一個數 (n),確定它的二進制表示中的第 x 位是0還是1
    • (n >> x) & 1 ,或者:n & 2 x 2^x 2x 2 x 2^x 2x也就是(1 << x))
  3. 將一個數 (n) 的二進制表示的第 x 位修改成 1
    • n |= (1 << x)
  4. 將一個數 (n) 的二進制表示的第x位修改成 0
    • n &= (~(1 << x))
  5. 位圖的思想【1 - 4 通常為位圖服務】
    • 本質:哈希表
    • 用變量的bit位(0 / 1)記錄信息:int有32個bit位
  6. 提取一個數 (n)二進制表示中最右側的 1
    • n & (- n)
    • 為什么正確?因為:(-n) 的補碼求法:在 n 的補碼上:從右向左找到第一個 1 ,這個 1 左邊的數全部取反(包括符號位)
  7. 干掉一個數 (n) 二進制表示中最右側的 1(1 變 0)
    • n &= (n - 1)
    • 為什么正確:因為:(n - 1)的值:在 n 的補碼上,最右側的 1 變 0 ,然后 1 右邊的 0 變 1
  8. 位運算的優先級
    • 能加括號就加括號
  9. 異或(^)運算的運算律
    • a ^ 0 = a
    • a ^ a = 0
    • a ^ b ^ c = a ^ (b ^ c),即:符合交換律和結合律

下面這些題目主要用于鞏固上面的知識:

191. 位 1 的個數

題目鏈接:https://leetcode.cn/problems/number-of-1-bits/description/
在這里插入圖片描述

class Solution {
public:int hammingWeight(int n) {int ans = 0;for(int i = 0; i < 32; i++){if((n >> i) & 1)ans++;}return ans;}
};
  • 如果我們想要依次得到一個int變量的每一位,可以for(int i = 0; i < 32; i++),然后每次讓變量>> i

338. 比特位計數

題目鏈接:https://leetcode.cn/problems/counting-bits/description/
在這里插入圖片描述

class Solution {
public:vector<int> countBits(int n) {vector<int> ans(n + 1);for(int i = 0; i <= n; i++){int count = 0, num = i;while(num > 0){num &= (num - 1); // 每次該最低位的 1 count++;}ans[i] = count;}return ans;}
};

461. 漢明距離

題目鏈接:https://leetcode.cn/problems/hamming-distance/description/
在這里插入圖片描述

class Solution {
public:int hammingDistance(int x, int y) {int s = x ^ y, ans = 0;while(s > 0){s &= (s - 1);ans++;}return ans;}
};

136. 只出現一次的數字

題目鏈接:https://leetcode.cn/problems/single-number/description/
在這里插入圖片描述

class Solution {
public:int singleNumber(vector<int>& nums) {int ans = nums[0];for(int i = 1; i < nums.size(); i++)ans ^= nums[i];return ans;}
};

260. 只出現一次的數字 III

題目鏈接:https://leetcode.cn/problems/single-number-iii/description/

在這里插入圖片描述
思路:
設答案為 a 和 b

  • 想辦法把兩個數 a, b 分開,分成兩組
  • 所有數異或的結果 s == a ^ b
  • 那么,s 的二進制位中為 1 的那一位,對于其他數:該位同為 1 / 0,相異以后得到 0
  • 但是對于 a 和 b 肯定是 一 1 一 0 才得到的 1
  • 于是可以根據 1 這一位,把原來的數組分成兩組
  • 再分別對組內的數進行全部異或,就可以得到 a 和 b
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {unsigned int s = 0;for(auto x: nums)s ^= x;unsigned int lowbit = s &= (-s); // 獲取最低位的 1int a = 0, b = 0;for(auto x: nums){if((x & lowbit))a ^= x;elseb ^= x;}return {a, b};}
};

🌈我的分享也就到此結束啦🌈
要是我的分享也能對你的學習起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學習交流!
📢公主,王子:點贊👍→收藏?→關注🔍
感謝大家的觀看和支持!祝大家都能得償所愿,天天開心!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78918.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78918.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小草GrassRouter多卡聚合路由器聚合衛星、MESH網絡應用解決方案

一、多網融合解決方案 衛星網絡融合? 支持接入衛星通信模塊&#xff0c;在無地面網絡覆蓋的極端場景&#xff08;如偏遠山區、海洋救援&#xff09;下&#xff0c;形成“5G衛星”雙鏈路冗余傳輸&#xff0c;衛星鏈路可作為核心通信備份&#xff0c;確保關鍵指令和視頻數據實…

【Mybatis】Mybatis基礎

文章目錄 前言一、搭建MyBatis1.1 創建maven工程1.2 加入log4j日志功能1.3 MyBatis的增刪改查1.4 核心配置文件詳解 二、MyBatis獲取參數值的兩種方式2.1 單個字面量類型的參數2.2 多個字面量類型的參數2.3 map集合類型的參數2.4 實體類類型的參數2.5 使用Param標識參數 三、 M…

AI四大邊界

大模型訓練的邊界并非由單一因素決定&#xff0c;而是技術、倫理、法律及實際應用需求共同作用的結果。以下從四個維度解析其邊界來源&#xff1a; 一、技術邊界&#xff1a;資源與能力的雙重限制 計算資源瓶頸 成本與算力&#xff1a;大模型訓練依賴海量GPU/TPU資源&#xff…

Twitter 工作原理|架構解析|社交APP邏輯

這是對Twitter 工作原理&#xff5c;架構解析&#xff5c;社交APP邏輯_嗶哩嗶哩_bilibili的學習&#xff0c;感謝up小凡生一 在兩年半前&#xff0c;埃隆馬斯克收購了Twitter&#xff0c;并且進行了一系列重大改革。今天我們來解析一下這個全球知名社交平臺的架構。首先&#x…

Java基礎學習內容大綱

Java基礎學習內容大綱 第一階段:建立編程思想 ? Java概述:如何快速學習Java技術、Java歷史、Java特點、Sublime、Java運行機制、JDK、轉義字符、Java開發規范、Java API ? 變量:數據類型、變量基本使用、數據類型轉換 ? 運算符:運算符介紹、算數運算符、關系運算符、…

如何對多維樣本進行KS檢驗

對于形狀為 ( 10000 , 1 , 304 ) (10000, 1, 304) (10000,1,304)的三維數據&#xff0c;若需使用scipy.stats.ks_2samp進行KS檢驗&#xff0c;可按以下步驟處理&#xff1a; 數據降維 KS檢驗要求輸入為一維數組&#xff0c;需將三維數據展平或按特定維度聚合&#xff1a; ? 方…

在 VMware 虛擬機中安裝 Windows7

文章目錄 前言1.安裝VMware 虛擬機1. VMware虛擬機軟件安裝2. 虛擬機創建配置&#xff08;超詳細步驟&#xff09;3. Windows7系統安裝 3、安裝 VMware tools4. VMware Tools安裝與優化5. 總結與常見問題 前言 最近有不少朋友在問如何在電腦上同時使用多個操作系統&#xff0c…

直播預告|TinyVue 組件庫高級用法:定制你的企業級UI體系

TinyVue 是一個跨端跨框架的企業級 UI 組件庫&#xff0c;基于 renderless 無渲染組件設計架構&#xff0c;實現了一套代碼同時支持 Vue2 和 Vue3&#xff0c;支持 PC 和移動端&#xff0c;包含 100 多個功能豐富的精美組件&#xff0c;可幫助開發者高效開發 Web 應用。 4 月 …

分治而不割裂—分治協同式敏捷工作模式

分治而不割裂&#xff1a;解密敏捷協同工作模式如何驅動大企業持續領跑 在數字化浪潮中&#xff0c;亞馬遜僅用11天完成Prime Day全球技術架構升級&#xff0c;華為5G基站項目組創造過單周迭代47個功能模塊的紀錄&#xff0c;這些商業奇跡的背后&#xff0c;都隱藏著一個共性秘…

Python列表全面解析:從基礎到高階操作

一、為什么需要列表&#xff1f; 在Python中&#xff0c;列表是可變有序序列&#xff0c;用于存儲多個元素的容器。相較于單一變量存儲獨立值&#xff0c;列表能更高效地管理批量數據&#xff0c;其特點包括&#xff1a; ?引用存儲&#xff1a;列表元素存儲的是對象的引用?…

Spring知識點梳理

一、Spring&#xff08;Spring Framework&#xff09; 1、IOC&#xff08;控制反轉&#xff09; 1&#xff09;什么是IOC控制反轉&#xff1f; 為了解藕&#xff0c;有反轉就有“正轉”&#xff0c;“正轉”就是程序員手動 new對象&#xff1b;“反轉”就是將對象的創建、對…

SpringBoot啟動后自動執行方法的各種方式-筆記

1. SpringBoot啟動后自動執行方法的各種方式 1.1 PostConstruct 注解 作用&#xff1a;在依賴注入完成后執行初始化方法。 適用場景&#xff1a;需要在Bean初始化時執行某些操作&#xff08;如配置、預加載數據&#xff09;。 注意&#xff1a;該方法在Bean初始化階段執行&…

基礎知識-java流steam

Java Stream 流詳解 一、Stream 概述 #mermaid-svg-ZXmu5UZgAcGGq8EN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZXmu5UZgAcGGq8EN .error-icon{fill:#552222;}#mermaid-svg-ZXmu5UZgAcGGq8EN .error-text{fil…

8.Android(通過Manifest配置文件傳遞數據(meta-data))

配置文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><applicationandroid:allowBackup"tr…

java 解析入參里的cron表達式,修改周時間

文章目錄 前言一、java 解析入參里的cron表達式,修改周時間二、使用步驟1.示例 總結 前言 一、java 解析入參里的cron表達式,修改周時間 示例&#xff1a; 第一種: 0 0 0,16 ? * 0,1 第2種 0 0 0,16 ? * 1-7 第3種 0 0 0,16 ? * ? 第4種 0 0 0,16 ? * * 二、使用步驟 1…

DTO,VO,PO,Entity

1. DTO (Data Transfer Object) 定義 DTO 是數據傳輸對象&#xff0c;用于在不同系統或層之間傳輸數據。 目的 簡化數據傳輸&#xff0c;降低耦合&#xff0c;通常只包含需要傳輸的字段&#xff0c;避免暴露內部實現細節。 使用場景 Controller 和 Service 或 遠程調用 之…

從零搭建高可用分布式限流組件:設計模式與Redis令牌桶實踐

一、需求背景與設計目標 在分布式系統中&#xff0c;面對突發流量時需要一種精準可控的流量控制手段。我們的組件需要具備&#xff1a; 多維度限流&#xff08;用戶/IP/服務節點/自定義表達式&#xff09;分布式環境下精準控制開箱即用的Spring Boot Starter集成高擴展性的架…

Node.js 事件循環和線程池任務完整指南?

在 Node.js 的運行體系中&#xff0c;事件循環和線程池是保障其高效異步處理能力的核心組件。事件循環負責調度各類異步任務的執行順序&#xff0c;而線程池則承擔著處理 CPU 密集型及部分特定 I/O 任務的工作。接下來&#xff0c;我們將結合圖示&#xff0c;詳細剖析兩者的工作…

echarts自定義圖表--儀表盤

基于儀表盤類型的自定義表盤 上圖為3層結構組成 正常一個儀表盤配置要在外圈和內圈之間制造一條縫隙間隔 再創建一個儀表盤配置 背景透明 進度條拉滿 進度條顏色和數據的背景相同開始處的線 又一個儀表盤配置 數值固定一個比較小的值 <!DOCTYPE html> <html><h…

【數據結構】圖論存儲結構深度解析:鄰接多重表如何實現無向圖O(1)刪邊?鄰接矩陣/鏈表/十字鏈對比

鄰接多重表 導讀一、有向圖的存儲結構二、鄰接多重表三、存儲結構四、算法評價4.1 時間復雜度4.2 空間復雜度 五、四種存儲方式的總結5.1 空間復雜度5.2 找相鄰邊5.3 刪除邊或結點5.4 適用于5.5 表示方式 六、圖的基本操作結語 導讀 大家好&#xff0c;很高興又和大家見面啦&a…