coding ability 展開第九幕(位運算——進階篇)超詳細!!!!

在這里插入圖片描述

文章目錄

  • 前言
  • 丟失的數字
  • 兩整數之和
  • 只出現一次的數字II
  • 消失的兩個數字
  • 總結

前言

上一篇博客,我們已經把位運算的基礎知識,以及基本運算都掌握啦
上次的習題還是讓人意猶未盡,今天我們來嘗試一下難一點的題目
位運算熟練起來真的讓人覺得做題是一種享受
fellow me

丟失的數字

丟失的數字
在這里插入圖片描述
思路:
少了一個數字,給他找回來不就好了嗎
讓我想到直接對數組 按位異或 一遍, 然后再對 0-n 按位異或一遍,出現兩次的都消消樂
剩下的就是我們要找的數字

class Solution 
{
public:int missingNumber(vector<int>& nums) {int ans = 0;for(auto x : nums){ans ^= x;   //  按位異或當前數組}for(int i = 0; i <= nums.size(); i++){ans ^= i;    //  重新按位異或一遍  0-n}return ans;}
};

兩整數之和

兩整數之和
在這里插入圖片描述

思路:
乍一看,不讓我用運算方法,那不是完蛋了嗎
但仔細想想,這不是學了位運算,前面了解到按位異或(^)是無進制加法,按位與(&)是進位
其實可以組合起來使用,我們先算出無進位相加的結果,然后再找出進位,給他加上,再如此反復循環,直到沒有進位

class Solution 
{
public:int getSum(int a, int b) {while(b != 0){int x = a ^ b;    //  無進位相加//  這里無符號  是防止溢出  unsigned int cur = (unsigned int) (a & b) << 1;  // 找出進位a = x;b = cur;}return a;}
};

就這么幾行,想明白了,還是很簡單的

只出現一次的數字II

只出現一次的數字II
在這里插入圖片描述
思路:
一眼hash直接秒了,但是題目要求常數級空間。。。。。
設要找的數位 ret
由于整個數組中,需要找的元素只出現了「一次」,其余的數都出現的「三次」,因此我們可以根據所有數的「某一個比特位」的總和 %3 的結果,快速定位到 ret 的「一個比特位上」的值是0 還是 1
這樣,我們通過 ret 的每一個比特位上的值,就可以將 ret 給還原出來

class Solution 
{
public:int singleNumber(vector<int>& nums) {int ret = 0;for(int i = 0; i < 32; i++){int sum = 0;for(auto x : nums){if(((x >> i) & 1) == 1)   //  判斷當前比特位{sum++;    // 累積個數}}sum %= 3;if(sum == 1)   //  符合條件就把ret當前的比特位置為 1{ret = ret | 1 << i;}}return ret;}
};

做完發現位運算真好奇妙

消失的兩個數字

消失的兩個數字
在這里插入圖片描述
最后一題hard難度結尾吧
思路:
缺了兩個數字,想到前面熱乎的缺一個數字,我們可以按位異或兩遍給他找出來,但是找出來的是兩個數字的異或
所以我們還要處理這兩個數字的異或,分解他們,又想到我們上一次做過的(兩個只出現一次的數字)
好像就是兩個題目的融合,才讓他到了hard的難度

class Solution 
{
public:vector<int> missingTwo(vector<int>& nums) {int ans = 0;for(auto x : nums)ans ^= x;for(int i = 1; i <= nums.size() + 2; i++)ans ^= i;//  現在找到了兩個數字的異或int x = 0, y = 0;ans = ans & (-(long long)ans);  //  提起ans二進制最右側的  1for(auto i : nums) //  分組異或 {   if((i & ans) == ans)x ^= i;elsey ^= i;}for(int i = 1; i <= nums.size() + 2; i++)//  分組異或{if((i & ans) == ans)x ^= i;elsey ^= i;}return {x, y};}
};

prefect 位運算完美收官

總結

今天通過幾道位運算題目,鞏固了位運算的應用技巧:

  1. 丟失的數字
    利用異或性質,兩次異或數組和0~n的數,出現兩次的抵消,剩下的即為缺失數。
  2. 兩整數之和
    通過異或(無進位加法)和與運算左移(進位)模擬加法,循環處理進位直至為零,注意用unsigned避免溢出。
  3. 只出現一次的數字II
    統計每一位1的個數,模3后確定目標數各位的值,逐位組合得到結果。
  4. 消失的兩個數字
    結合異或和分組思想,先找到兩數異或結果,提取最右1進行分組,分別異或數組和完整序列得到兩數。
    心得
    位運算題目需靈活運用位操作性質,如異或消重、與運算找進位、按位統計等
    通過分解問題、逐步處理,能將復雜問題簡化,然后逐個擊破

今天的內容就到這里啦,不要走開,小編持續更新中~~~~

在這里插入圖片描述

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

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

相關文章

【數據結構篇】算法征途:穿越時間復雜度與空間復雜度的迷霧森林

文章目錄 【數據結構篇】算法征途&#xff1a;穿越時間復雜度與空間復雜度的迷霧森林 一、 什么是算法1. 算法的定義1.1 算法的五個特征1.2 好算法的特質 2. 時間復雜度3. 空間復雜度 【數據結構篇】算法征途&#xff1a;穿越時間復雜度與空間復雜度的迷霧森林 &#x1f4ac;歡…

Logo語言的系統監控

Logo語言的系統監控 引言 在信息技術飛速發展的時代&#xff0c;系統監控成為了確保計算機系統和網絡平穩運行的重要手段。系統監控不僅可以實時跟蹤系統的性能、資源使用情況和安全風險等&#xff0c;還能夠在出現問題時及時發出警報&#xff0c;從而避免潛在的故障和損失。…

STP學習

{所有內容均來自于西安歐鵬的陳俊老師} STP生成樹 當二層交換機意外成環路的時候會發生&#xff1a; 1.廣播風暴&#xff1a;當廣播幀進入環路時&#xff0c;會被不斷復制并傳輸&#xff0c;導致網絡中的廣播流量急劇增加&#xff0c;消耗大量的網絡帶寬&#xff0c;降低網絡…

使用RKNN進行yolo11-cls部署

文章目錄 概要制作數據集模型訓練onnx導出rknn導出概要 YOLO(You Only Look Once)是一系列高效的目標檢測算法,其核心思想是將目標檢測任務轉化為一個回歸問題,通過單個神經網絡直接在圖像上預測邊界框和類別概率。當將其用于分類任務時,會去除目標檢測相關的邊界框預測部…

【MySQL】01.MySQL環境安裝

注意&#xff1a;在MYSQL的安裝與卸載中&#xff0c;需要使用root用戶進行。 一、卸載不必要的環境 ? 查看是否有運行的服務 [rootVM-24-10-centos etc]# ps axj |grep mysql1 22030 22029 22029 ? -1 Sl 27 0:00 /usr/sbin/mysqld --daemonize --pid-fi…

程序化廣告行業(59/89):廣告驗證與反作弊實戰技巧

程序化廣告行業&#xff08;59/89&#xff09;&#xff1a;廣告驗證與反作弊實戰技巧 大家好&#xff01;在程序化廣告領域&#xff0c;想要做好投放&#xff0c;除了了解基本的架構和原理&#xff0c;還得掌握一些關鍵的技能&#xff0c;比如廣告驗證和反作弊。今天就和大家一…

矢量瓦片切片工具

1.geoserver 可以生成geojson mvt(pbf) tojson 三種格式矢量瓦片 2.mapbox的tippecanoe 可以生成pbf矢量瓦片&#xff0c;文件夾形式和mbtiles兩種 3.TileStache python工具&#xff0c;可以生成geojson瓦片 4.PostGis mapbox插件可以生成pbf瓦片&#xff0c;據說是動態切片…

Windows 系統 Git 2.15.0 (64位) 下載與安裝教程

1. 下載 Git 2.15.0 (64位) 安裝包 下載地址&#xff1a;https://pan.quark.cn/s/f817ab9285dc 2. 運行安裝程序 雙擊下載的 Git-2.15.0-64-bit.exe。 如果系統提示安全警告&#xff0c;選擇 “運行”&#xff08;確認來源可信&#xff09;。 3. 安裝向導設置 按以下步驟配…

MCP服務器:AI與外部工具交互的橋梁——Python和代理AI工具集成指南

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

AIGC8——大模型生態與開源協作:技術競逐與普惠化浪潮

引言&#xff1a;大模型發展的分水嶺時刻 2024年成為AI大模型發展的關鍵轉折點&#xff1a;OpenAI的GPT-4o實現多模態實時交互&#xff0c;中國DeepSeek-MoE-16b模型以1/8成本達到同類90%性能&#xff0c;而開源社區如Mistral、LLama 3持續降低技術門檻。這場"閉源商業巨…

Muduo網絡庫實現 [十五] - HttpContext模塊

目錄 設計思路 類的設計 解碼過程 模塊的實現 私有接口 請求函數 解析函數 公有接口 疑惑點 設計思路 記錄每一次請求處理的進度&#xff0c;便于下一次處理。 上下文模塊是Http協議模塊中最重要的一個模塊&#xff0c;他需要記錄每一次請求處理的進度&#xff0c;需…

解決GraalVM Native Maven Plugin錯誤:JAVA_HOME未指向GraalVM Distribution

目錄 問題描述解決方案為什么需要這樣配置&#xff1f; 問題描述 在你的項目中&#xff0c;如果你遇到了以下錯誤信息&#xff1a; [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…

java 代碼錯誤分析

錯誤代碼 class Test {private static String name; // 聲明一個私有靜態變量 namename "World"; // 靜態初始化塊&#xff0c;給 name 賦值為 "World"System.out.print(name); // 打印 name 的值public static void main(String[] args) {System.out.p…

企業供應鏈管理

企業供應鏈管理 企業供應鏈管理 企業供應鏈管理企業信息化信息化的作用信息化的發展階段信息化建設的挑戰 SRM&#xff08;供應商關系管理&#xff09;SRM架構參考圖企業內部系統協作&#xff1a; ERP (企業資源計劃)OA (辦公自動化)業務功能模塊&#xff1a;企業日常辦公 EMS …

Pascal語言的系統監控

Pascal語言的系統監控 引言 在現代計算機系統中&#xff0c;系統監控是確保計算機平穩運行的重要組成部分。無論是個人計算機還是大型服務器&#xff0c;監控系統的性能、資源使用及狀態&#xff0c;都是提高系統效率、及時發現問題的關鍵。Pascal語言作為一種結構化編程語言…

出現次數超過一半的數(信息學奧賽一本通-1186)

【題目描述】 給出一個含有n&#xff08;0 < n < 1000&#xff09;個整數的數組&#xff0c;請找出其中出現次數超過一半的數。數組中的數大于-50且小于50。 【輸入】 第一行包含一個整數n&#xff0c;表示數組大小&#xff1b; 第二行包含n個整數&#xff0c;分別是數組…

解決 CANoe 多測試用例下固定 IP 地址沖突問題的分析與方案

問題描述&#xff1a; CANoe的測試環境如下&#xff1a; 在Ethernet1總線上&#xff0c;通過VN5620連接了PCU&#xff08;實物&#xff09;&#xff1b; 使用VtestStudio&#xff08;VTS&#xff09;開發&#xff0c;并且生成了三個測試腳本(vtt文件)&#xff0c;分別為&#…

React 項目使用 pdf.js 及 Elasticpdf 教程

摘要&#xff1a;本文章介紹如何在 React 中使用 pdf.js 及基于 pdf.js 的批注開發包 Elasticpdf。簡單 5 步可完成集成部署&#xff0c;包括數據的云端同步&#xff0c;示例代碼完善且簡單&#xff0c;文末有集成代碼分享。 1. 工具庫介紹與 Demo 1.1 代碼包結構 ElasticP…

python爬蟲:小程序逆向(需要的工具前期準備)

前置知識點 1. wxapkg文件 如何查看小程序包文件 打開wechat的設置&#xff1a; .wxapkg概述 .wxapkg是小程序的包文件格式&#xff0c;且其具有獨特的結構和加密方式。它不僅包含了小程序的源代碼&#xff0c;還包括了圖像和其他資源文件&#xff0c;這些內容在普通的文件…

Prolog語言的強化學習

Prolog語言的強化學習 引言 強化學習&#xff08;Reinforcement Learning, RL&#xff09;是機器學習的一個重要分支&#xff0c;它通過與環境交互來學習最優策略&#xff0c;以最大化累積獎勵。在強化學習中&#xff0c;智能體&#xff08;Agent&#xff09;通過試錯方式與環…