01 位運算

12days?

章節結構

00 算法前導課-編程基礎(自學的視頻)

01 位運算的奇巧淫技

02 查找與排序(上)

03 數組、查找與排序(下)

04 多維數組與矩陣

05 字符串專題

06 基本數學問題

06 遞歸、DFS、剪枝、回溯等問題

07 貪心策略與動態規劃

08 線性結構:列表、鏈表、棧、隊列

09 哈希表、哈希映射

10 樹結構

11 圖論

推薦書籍

《程序員面試金典》【cc150 :crack the code of interview】、《挑戰程序設計競賽》、《程序員代碼面試指南》、《劍指offer》、《編程之美》、《算法導論》

學習方法

多敲多理解多復習

位運算與進制基礎

進制基礎:

? ? ? ? 十進制、二進制、八進制、十六進制(A-F代表10-15)

進制轉換方法:

? ? ? ? 十轉二、二轉十、二轉八、八轉二、二轉十六、十六轉二

位運算:

????????按位與(&)、按位或(|)、按位異或(^)、按位取反(~)

? ? ? ? 左移(<<)、右移(>>)

判斷奇偶數

使用&運算

// 判斷一個數是奇數還是偶數
public class BitwiseTricks {// 方法:判斷奇偶數public static boolean isEven(int num) {// 與1進行按位與操作,如果結果為0,則是偶數,否則是奇數return (num & 1) == 0;}public static void main(String[] args) {int num1 = 10; int num2 = 7;System.out.println(num1 + " is even: " + isEven(num1)); System.out.println(num2 + " is even: " + isEven(num2)); }
}
?
  • isEven方法中,num & 1只保留了num的最低位。如果num是偶數,其最低位為 0,與 1 按位與結果為 0;如果是奇數,最低位為 1,與 1 按位與結果為 1。

獲取二進制位是 1 還是 0

?
  • 方法一:位移和按位與
// 獲取整數指定位置的二進制位是1還是0(方法一:位移和按位與)
public class BitwiseTricks {// 方法:獲取指定位置的位public static int getBit(int num, int i) {// 將num右移i位,然后與1進行按位與操作return (num >> i) & 1;}public static void main(String[] args) {int num = 13; // 二進制為1101int bitPosition = 2; System.out.println("The bit at position " + bitPosition + " of " + num + " is: " + getBit(num, bitPosition)); }
}
? &運算用1做運算即保留,用0做運算即消除
  • 這里num >> inum的第i位移動到最低位,然后與 1 按位與,得到該位的值(0 或 1)。

  • 方法二:掩碼操作

// 獲取整數指定位置的二進制位是1還是0(方法二:掩碼操作)
public class BitwiseTricks {// 方法:獲取指定位置的位public static int getBit(int num, int i) {// 創建掩碼,將1左移i位int mask = 1 << i;// 與num進行按位與操作return (num & mask) != 0 ? 1 : 0;}public static void main(String[] args) {int num = 13; // 二進制為1101int bitPosition = 2; System.out.println("The bit at position " + bitPosition + " of " + num + " is: " + getBit(num, bitPosition)); }
}
?
  • 1 << i創建了一個只有第i位為 1 的掩碼,與num按位與后,如果結果不為 0,則num的第i位為 1,否則為 0。

交換兩個整數變量的值

// 交換兩個整數變量的值
public class BitwiseTricks {// 方法:交換兩個整數public static void swap(int[] nums, int i, int j) {// 利用異或操作交換兩個數nums[i] = nums[i] ^ nums[j];nums[j] = nums[i] ^ nums[j];nums[i] = nums[i] ^ nums[j];}public static void main(String[] args) {int[] nums = {5, 10};System.out.println("Before swap: num1 = " + nums[0] + ", num2 = " + nums[1]);swap(nums, 0, 1);System.out.println("After swap: num1 = " + nums[0] + ", num2 = " + nums[1]);}
}
?
  • 原理與前面 C/C++ 的示例相同,通過三次異或操作實現兩個數的交換,而不需要額外的臨時變量。

不用判斷語句,求整數的絕對值

// 不用判斷語句求整數的絕對值
public class BitwiseTricks {// 方法:求整數的絕對值public static int abs(int x) {// 得到符號位擴展后的結果int mask = x >> 31;// 利用異或操作求絕對值return (x + mask) ^ mask;}public static void main(String[] args) {int num1 = -5;int num2 = 7;System.out.println("The absolute value of " + num1 + " is: " + abs(num1));System.out.println("The absolute value of " + num2 + " is: " + abs(num2));}
}
?
  • x >> 31對于正數得到 0,對于負數得到-1(在 Java 中int是 32 位有符號整數,-1的二進制表示為全 1)。對于正數,(x + mask) ^ mask = x ^ 0 = x;對于負數,x + mask相當于x - 1,然后與mask異或得到其絕對值。

題解

題1:找出唯一成對的數
????????1-1000這1000個數放在含有1001個元素的數組中,只有唯一的一個元素值重復,其它均只出現一次。每個數組元素只能訪問一次,設計一個算法,將它找出來;不用輔助存儲空間,能否設計一個算法實現?

//使用異或運算
public class 找出唯一成對的數 {public static void main(String[] args) {int N = 1001;int []arr= new int[N];for(int i = 0;i<arr.length-1;i++){arr[i]=i+1;}//生成最后一個隨機數arr[arr.length-1]=new Random().nextInt(N-1)+1;//隨機下標//這個先實現不了for (int i = 0; i < arr.length; i++) {System.out.print(" "+arr[i]);}int x1=0;for(int i=1;i<=N-1;i++){x1=(x1^i);}for(int i=0;i<N;i++){x1=x1^arr[i];}System.out.println();System.out.println(x1);}
}

題2:找出落單的那個數
????????一個數組里除了某一個數字之外,其他的數字都出現了兩次。請寫程序找出這個只出現一次的數字。

  • 使用?str.charAt(i) - '0'?將字符轉換為對應的整數值。
  • 這種方法利用了字符在ASCII表中的順序特性。

題3:二進制中1的個數
????????請實現一個函數,輸入一個整數,輸出該數二進制表示中1的個數。

????????例:9的二進制表示為1001,有2位是1

題4:是不是2的整數次方

????????用一條語句判斷一個整數是不是2的整數次方。

失敗的藍橋準備工作:經驗教訓以后別懶

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

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

相關文章

HDFS Full Block Report超限導致性能下降的原因分析

文章目錄 前言發現問題失敗的為什么是FBR塊匯報頻率的變化為什么FBR會反復失敗HDFS性能下降導致Yarn負載變高的形式化分析理解線程理解IO Wait理解HDFS性能下降導致Yarn負載和使用率增高 引用 前言 我們的Yarn Cluster主要用來運行一批由Airflow定時調度的Spark Job&#xff0…

【Kubernetes基礎--Pod深入理解】--查閱筆記2

深入理解Pod 為什么要有個Pod1. 容器協作與資源共享2. 簡化調度和資源管理3. 設計模式支持 Pod 基本用法Pod 容器共享 VolumePod 的配置管理ConfigMap 概述創建 ConfigMap 資源對象在 Pod 中使用 ConfigMap使用 ConfigMap 的限制條件 為什么要有個Pod Pod 的引入并非技術冗余&…

Margin和Padding在WPF和CSS中的不同

CSS和WPF中 margin 與 padding 在方向上的規定基本一致&#xff0c;但在使用場景和一些細節上有所不同。 CSS - 方向規定&#xff1a; margin 和 padding 屬性可以分別指定上、右、下、左四個方向的值。例如 margin:10px 20px 30px 40px; 表示上外邊距為10px、右外邊距為20…

gravity`(控制 View 內部內容的對齊方式)

文章目錄 **1. 常用取值****示例** **2. layout_gravity&#xff08;控制 View 在父容器中的對齊方式&#xff09;****常用取值****示例** **3. gravity vs layout_gravity 對比****4. 注意事項****5. 總結** 作用對象&#xff1a;當前 View 的內部內容&#xff08;如 TextView…

Go:使用共享變量實現并發

競態 在串行程序中&#xff0c;步驟執行順序由程序邏輯決定&#xff1b;而在有多個 goroutine 的并發程序中&#xff0c;不同 goroutine 的事件先后順序不確定&#xff0c;若無法確定兩個事件先后&#xff0c;它們就是并發的。若一個函數在并發調用時能正確工作&#xff0c;稱…

Vue3 SSR Serverless架構革命:彈性計算與量子加速

一、全維度Serverless SSR架構 1.1 蜂巢式彈性調度系統 1.2 冷啟動時間優化表 優化策略Node.js冷啟(ms)Deno冷啟(ms)Bun冷啟(ms)裸啟動1800960420預編譯二進制650380210內存快照預熱22016090WASM實例池15011075量子狀態預載453832 二、邊緣渲染協議升級 2.1 流式SSR響應協議…

FPAG IP核調用小練習

一、調用步驟 1、打開Quartus 右上角搜索ROM&#xff0c;如圖所示 2、點擊后會彈出如圖所示 其中文件路徑需要選擇你自己的 3、點擊OK彈出如圖所示 圖中紅色改為12與1024 4、然后一直點NEXT&#xff0c;直到下圖 這里要選擇后綴為 .mif的文件 5、用C語言生成 .mif文件 //…

Spring Cloud 服務間調用深度解析

前言 在構建微服務架構時&#xff0c;服務間的高效通信是至關重要的。Spring Cloud 提供了一套完整的解決方案來實現服務間的調用、負載均衡、服務發現等功能。本文將深入探討 Spring Cloud 中服務之間的調用機制&#xff0c;并通過源碼片段和 Mermaid 圖表幫助讀者更好地理解…

AF3 generate_chain_data_cache腳本解讀

AlphaFold3 generate_chain_data_cache 腳本在源代碼的scripts文件夾下。該腳本從指定目錄中批量解析 mmCIF/PDB 文件的工具,并將每個鏈的基本信息(序列、分辨率、是否屬于聚類等)提取并寫入 JSON 文件,主要用于后續蛋白質建模、過濾或訓練數據準備。 源代碼: import ar…

vue項目打包部署到maven倉庫

需要的資源文件&#xff0c;都放在根目錄下&#xff1a; 1. versionInfo.js const fs require(fs) const path require(path) const mkdirp require(mkdirp) const spawn require(child_process).spawnconst packageObj require(./package.json) const versionNo packa…

MegaTTS3: 下一代高效語音合成技術,重塑AI語音的自然與個性化

在近期的發布中&#xff0c;浙江大學趙洲教授團隊與字節跳動聯合推出了革命性的第三代語音合成模型——MegaTTS3&#xff0c;該模型不僅在多個專業評測中展現了卓越的性能&#xff0c;還為AI語音的自然性和個性化開辟了新的篇章。 MegaTTS3技術亮點 零樣本語音合成 MegaTTS3采用…

【教程】PyTorch多機多卡分布式訓練的參數說明 | 附通用啟動腳本

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 目錄 torchrun 一、什么是 torchrun 二、torchrun 的核心參數講解 三、torchrun 會自動設置的環境變量 四、torchrun 啟動過程舉例 機器 A&#…

計算機視覺——基于 Yolov8 目標檢測與 OpenCV 光流實現目標追蹤

1. 概述 目標檢測&#xff08;Object Detection&#xff09;和目標追蹤&#xff08;Object Tracking&#xff09;是計算機視覺中的兩個關鍵技術&#xff0c;它們在多種實際應用場景中發揮著重要作用。 目標檢測指的是在靜態圖像或視頻幀中識別出特定類別的目標對象&#xff0…

MySQL——流程控制

一、IF條件語句 語法 IF condition THENstatements; ELSEIF condition THENstatements; ELSEstatements; END IF; 判斷成績等級 # 判斷成績等級 # 輸入學生的編號,取出學生的第一門課&#xff0c;然后判斷當前的課程的等級 drop procedure if exists p2; delimiter $$ crea…

C# + Python混合開發實戰:優勢互補構建高效應用

文章目錄 前言&#x1f94f;一、典型應用場景1. 桌面應用智能化2. 服務端性能優化3. 自動化運維工具 二、四大技術實現方案方案1&#xff1a;進程調用&#xff08;推薦指數&#xff1a;★★★★☆&#xff09;方案2&#xff1a;嵌入Python解釋器&#xff08;推薦指數&#xff1…

MLflow 入門

官方主頁 MLflow | MLflow官方文檔 MLflow: A Tool for Managing the Machine Learning Lifecycle | MLflow 0. 簡介 MLflow 是一個開源平臺&#xff0c;專門為了幫助機器學習的從業者和團隊處理機器學習過程中的復雜性而設計。MLflow 關注機器學習項目的完整生命周期&#x…

【藍橋杯選拔賽真題101】Scratch吐絲的蜘蛛 第十五屆藍橋杯scratch圖形化編程 少兒編程創意編程選拔賽真題解析

目錄 scratch吐絲的蜘蛛 一、題目要求 1、準備工作 2、功能實現 二、案例分析 1、角色分析 2、背景分析 3、前期準備 三、解題思路 四、程序編寫 五、考點分析 六、推薦資料 1、scratch資料 2、python資料 3、C++資料 scratch吐絲的蜘蛛 第十五屆青少年藍橋杯s…

智譜最新模型GLM4是如何練成的

寫在前面 這篇博客將基于《ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools》,深入剖析 GLM-4 系列在**模型架構設計、預訓練、后訓練(對齊)、以及關鍵技術創新(如長上下文處理、Agent 能力構建)**等環節的實現邏輯與設計考量,帶你全面了…

第二屆電氣技術與自動化工程國際學術會議 (ETAE 2025)

重要信息 2025年4月25-27日 中國廣州 官網: http://www.icetae.com/ 部分 征稿主題 Track 1&#xff1a;電氣工程 輸配電、電磁兼容、高電壓和絕緣技術、電氣工程、電氣測量、電力電子及其應用、機電一體化、電路與系統、電能質量和電磁兼容性、電力系統及其自…

設備調試--反思與總結

最近回顧項目&#xff0c; 發現&#xff1a;在調試過程中最耽誤時間的可能不是技術難度&#xff0c;而是慣性思維&#xff1b; 例如&#xff1a; 我寫can通信濾波器的時候&#xff0c;可能是不過濾的&#xff1b;是接收所有的id報文&#xff0c;然后用業務邏輯過濾&#xff08…