位運算詳解之異或運算的奇妙操作

位運算詳解之異或運算的奇妙操作

    • 一、異或運算的本質與核心性質
      • 1.1 異或運算的定義與邏輯規則
      • 1.2 異或運算的核心代數性質
        • (1)自反性:`a ^ a = 0`
        • (2)恒等性:`a ^ 0 = a`
        • (3)交換律:`a ^ b = b ^ a`
        • (4)結合律:`(a ^ b) ^ c = a ^ (b ^ c)`
        • (5)分配律:`a ^ (b & c) = (a ^ b) & (a ^ c)`
      • 1.3 異或運算的二進制位操作特性
    • 二、異或運算的經典應用場景
      • 2.1 變量交換的優雅實現
      • 2.2 尋找數組中唯一出現一次的數字
        • 問題描述(LeetCode 136)
        • 異或解法
        • 原理剖析
      • 2.3 異或運算在加密解密中的應用
        • 簡易異或加密算法
        • 加密原理
    • 三、異或運算的高級算法技巧
      • 3.1 尋找數組中出現奇數次的兩個數字
        • 問題描述(LeetCode 260)
        • 異或解法
        • 解題思路
      • 3.2 異或運算與線性反饋移位寄存器(LFSR)
        • 原理說明
      • 3.3 異或運算與布隆過濾器
        • 核心邏輯
    • 四、異或運算的硬件實現與性能分析
      • 4.1 異或門的電路設計
      • 4.2 異或運算的性能優勢
      • 4.3 異或運算與其他運算的性能對比
    • 五、異或運算的邊界情況與注意事項
      • 5.1 異或運算的陷阱
        • (1)異或交換的限制
        • (2)異或加密的安全隱患
      • 5.2 異或運算的優化實踐
        • (1)利用異或實現快速歸零
        • (2)異或運算替代條件判斷
    • 六、異或運算的前沿應用
      • 6.1 異或在量子計算中的應用
      • 6.2 異或在區塊鏈中的應用

異或運算(XOR)以其獨特的邏輯特性和高效的運算效率,在算法設計、數據加密、硬件電路設計等領域應用廣泛,從交換變量的優雅實現到破解"只出現一次的數字"這類經典算法題,異或運算總能以簡潔而精妙的方式解決看似復雜的問題。本文我就將深入剖析異或運算的本質、核心性質及一系列令人稱奇的騷操作,帶您進入這種神奇的位運算。

一、異或運算的本質與核心性質

1.1 異或運算的定義與邏輯規則

異或運算(XOR)是一種二元位運算,其邏輯規則是:當兩個二進制位相異時結果為1,相同時結果為0。用符號"^"表示,運算規則可表示為:

  • 0 ^ 0 = 0
  • 0 ^ 1 = 1
  • 1 ^ 0 = 1
  • 1 ^ 1 = 0

從邏輯表達式看,異或運算等價于"不進位加法",這一特性使其在硬件加法器設計中扮演關鍵角色。例如,十進制數5(二進制101)和3(二進制011)的異或運算過程如下:

  101
^ 011
------110  // 結果為6

1.2 異或運算的核心代數性質

異或運算具有一系列優美的代數性質,這些性質是其奇妙應用的理論基礎:

(1)自反性:a ^ a = 0

任意數與自身異或結果為0,這一性質常用于數據歸零操作。例如:

int a = 5;
a ^= a;  // a的值變為0
(2)恒等性:a ^ 0 = a

任何數與0異或結果保持不變,這是異或加密的基礎性質。例如:

int a = 5;
int b = a ^ 0;  // b的值仍為5
(3)交換律:a ^ b = b ^ a

異或運算滿足交換律,運算順序不影響結果:

int a = 3, b = 5;
int xor1 = a ^ b;
int xor2 = b ^ a;
System.out.println(xor1 == xor2);  // 輸出true
(4)結合律:(a ^ b) ^ c = a ^ (b ^ c)

多個異或運算可任意結合,這在密碼學和數據校驗中至關重要:

int a=1, b=2, c=3;
int xor1 = (a ^ b) ^ c;
int xor2 = a ^ (b ^ c);
System.out.println(xor1 == xor2);  // 輸出true
(5)分配律:a ^ (b & c) = (a ^ b) & (a ^ c)

異或對與運算滿足分配律,這一性質在布爾代數化簡中有用:

int a=5, b=3, c=2;
int left = a ^ (b & c);
int right = (a ^ b) & (a ^ c);
System.out.println(left == right);  // 輸出true(需具體計算驗證)

1.3 異或運算的二進制位操作特性

從二進制位視角看,異或運算具有以下關鍵特性:

  • 位翻轉:若想翻轉某個二進制位(0變1或1變0),只需與1異或:a ^ 1會翻轉a的最低位
  • 位保留:若想保留某個二進制位,只需與0異或:a ^ 0保持a的對應位不變
  • 無進位加法:兩個二進制位的異或結果等價于不考慮進位的加法結果,這是半加器的設計原理

二、異或運算的經典應用場景

2.1 變量交換的優雅實現

傳統的變量交換需要借助臨時變量,而異或運算可在不使用臨時變量的情況下完成交換,這是其最廣為人知的奇妙應用:

public class XorSwap {public static void main(String[] args) {int a = 5, b = 3;System.out.println("交換前: a=" + a + ", b=" + b);// 異或交換三步曲a ^= b;  // a = a ^ b = 5 ^ 3 = 6 (110)b ^= a;  // b = b ^ (a ^ b) = 3 ^ 6 = 5 (101)a ^= b;  // a = (a ^ b) ^ b = 6 ^ 5 = 3 (011)System.out.println("交換后: a=" + a + ", b=" + b);}
}

原理分析:利用異或的自反性和交換律,通過三次異或操作實現交換。該方法的時間復雜度為O(1),空間復雜度為O(1),但需注意:

  1. 不能用于同一變量交換(如swap(a, a)
  2. 在處理浮點數時需先轉換為整數類型

2.2 尋找數組中唯一出現一次的數字

問題描述(LeetCode 136)

給定一個整數數組,除了某個元素外,其余元素均出現兩次,找出這個只出現一次的元素。

異或解法
public class SingleNumber {public int singleNumber(int[] nums) {int result = 0;for (int num : nums) {result ^= num;}return result;}public static void main(String[] args) {SingleNumber solution = new SingleNumber();int[] nums = {2, 2, 1, 3, 3};System.out.println(solution.singleNumber(nums));  // 輸出1}
}
原理剖析
  • 由于異或運算滿足交換律和結合律,且a ^ a = 0a ^ 0 = a
  • 數組中出現兩次的數字異或后結果為0,最終剩下的就是只出現一次的數字
  • 時間復雜度:O(n),空間復雜度:O(1),這是該問題的最優解法

2.3 異或運算在加密解密中的應用

簡易異或加密算法

異或加密是最基礎的對稱加密方式,利用"加密密鑰異或明文=密文"和"密文異或密鑰=明文"的特性:

public class XorEncryption {// 加密函數public static byte[] encrypt(byte[] data, byte[] key) {byte[] result = new byte[data.length];for (int i = 0; i < data.length; i++) {result[i] = (byte) (data[i] ^ key[i % key.length]);}return result;}// 解密函數(與加密函數相同)public static byte[] decrypt(byte[] encrypted, byte[] key) {return encrypt(encrypted, key);}public static void main(String[] args) {String plainText = "Hello XOR Encryption!";byte[] data = plainText.getBytes();byte[] key = "密鑰".getBytes();byte[] encrypted = encrypt(data, key);byte[] decrypted = decrypt(encrypted, key);System.out.println("明文: " + plainText);System.out.println("密文: " + new String(encrypted));System.out.println("解密: " + new String(decrypted));}
}
加密原理
  • 異或加密的安全性基于"一次一密"原則,若密鑰是隨機且長度與明文相同,則具有理論上的絕對安全性
  • 實際應用中需注意:
    1. 密鑰的隨機性和保密性至關重要
    2. 相同密鑰加密相同明文會產生相同密文,存在被統計分析的風險
    3. 該算法對二進制數據(如圖像、音頻)同樣有效

三、異或運算的高級算法技巧

3.1 尋找數組中出現奇數次的兩個數字

問題描述(LeetCode 260)

給定一個整數數組,其中恰好有兩個元素出現奇數次,其余元素均出現偶數次,找出這兩個元素。

異或解法
public class TwoSingleNumbers {public int[] singleNumber(int[] nums) {// 第一步:所有數異或得到a^bint xorResult = 0;for (int num : nums) {xorResult ^= num;}// 第二步:找到異或結果中最低位的1int lowestOne = xorResult & (-xorResult);// 第三步:分組異或int[] result = new int[2];for (int num : nums) {if ((num & lowestOne) == 0) {result[0] ^= num;} else {result[1] ^= num;}}return result;}public static void main(String[] args) {TwoSingleNumbers solution = new TwoSingleNumbers();int[] nums = {1, 2, 1, 3, 2, 5};int[] result = solution.singleNumber(nums);System.out.println("出現奇數次的兩個數: " + result[0] + " 和 " + result[1]);}
}
解題思路
  1. 所有數異或得到a ^ b(a和b是兩個目標數)
  2. 找到a ^ b中最低位的1,該位表明a和b在該位不同
  3. 根據該位將數組分為兩組,分別異或得到a和b
  4. 時間復雜度:O(n),空間復雜度:O(1)

3.2 異或運算與線性反饋移位寄存器(LFSR)

線性反饋移位寄存器是生成偽隨機數的重要器件,而異或運算是其核心運算單元:

public class LFSR {private int state;private int tap;// 初始化LFSR狀態和抽頭位置public LFSR(int initialState, int tapPosition) {state = initialState;tap = 1 << tapPosition;}// 生成一個隨機位public int nextBit() {// 計算反饋位(抽頭位置異或)int feedback = (state & tap) != 0 ? 1 : 0;// 右移一位,并將反饋位放入最高位state = (state >> 1) | (feedback << 31);return state & 1;}// 生成n位隨機數public int next(int n) {int result = 0;for (int i = 0; i < n; i++) {result = (result << 1) | nextBit();}return result;}public static void main(String[] args) {LFSR lfsr = new LFSR(12345, 31);  // 初始狀態和抽頭位置System.out.println("隨機數: " + lfsr.next(16));}
}
原理說明
  • LFSR通過異或運算實現反饋邏輯,產生周期性的偽隨機序列
  • 抽頭位置的選擇決定了隨機序列的周期和隨機性
  • 異或運算的高效性使其非常適合硬件實現,廣泛應用于通信領域的偽隨機序列生成

3.3 異或運算與布隆過濾器

布隆過濾器是一種空間效率高的概率性數據結構,異或運算在其哈希函數組合中發揮作用:

public class XorBloomFilter {private boolean[] bits;private int size;private int hashFuncs;public XorBloomFilter(int capacity, double errorRate) {// 計算位數組大小和哈希函數數量size = (int) (-capacity * Math.log(errorRate) / (Math.log(2) * Math.log(2)));hashFuncs = (int) (size / capacity * Math.log(2));bits = new boolean[size];}// 插入元素public void add(String element) {for (int i = 0; i < hashFuncs; i++) {int hash = xorHash(element, i);bits[hash % size] = true;}}// 檢查元素是否存在public boolean contains(String element) {for (int i = 0; i < hashFuncs; i++) {int hash = xorHash(element, i);if (!bits[hash % size]) {return false;}}return true;}// 異或哈希函數private int xorHash(String str, int seed) {int hash = seed;for (char c : str.toCharArray()) {hash ^= (hash << 5) + (hash >> 2) + c;}return hash;}
}
核心邏輯
  • 通過多個異或哈希函數生成不同的哈希值,提高布隆過濾器的準確性
  • 異或操作的混合特性有助于減少哈希沖突
  • 相比傳統哈希函數,異或哈希在硬件實現上更高效

四、異或運算的硬件實現與性能分析

4.1 異或門的電路設計

異或運算在硬件層面由異或門實現,其電路結構如下:

     A\XOR門   Y/B

異或門的邏輯表達式為:Y = A ⊕ B = A'B + AB',其中A和B是輸入,Y是輸出。在CMOS電路中,異或門由6個晶體管組成,是最基礎的邏輯門之一。

4.2 異或運算的性能優勢

在現代處理器中,異或運算具有以下性能特點:

  • 指令周期短:異或運算在x86架構中對應XOR指令,其CPI(Clock Per Instruction)通常為1
  • 零延遲特性:某些處理器(如ARM)中,異或運算可實現零延遲結果
  • 功耗低:相比乘法、除法等運算,異或運算的功耗可忽略不計
  • 并行性好:SIMD指令集(如SSE、AVX)支持同時對多個數據進行異或運算

4.3 異或運算與其他運算的性能對比

在Java中,異或運算與其他位運算的性能測試(測試1億次運算):

public class PerformanceTest {public static void main(String[] args) {int a = 0x12345678, b = 0x87654321;// 異或運算性能測試long startXor = System.nanoTime();for (int i = 0; i < 100000000; i++) {int x = a ^ b;}long endXor = System.nanoTime();// 與運算性能測試long startAnd = System.nanoTime();for (int i = 0; i < 100000000; i++) {int x = a & b;}long endAnd = System.nanoTime();// 或運算性能測試long startOr = System.nanoTime();for (int i = 0; i < 100000000; i++) {int x = a | b;}long endOr = System.nanoTime();System.out.println("異或運算耗時: " + (endXor - startXor) + "納秒");System.out.println("與運算耗時: " + (endAnd - startAnd) + "納秒");System.out.println("或運算耗時: " + (endOr - startOr) + "納秒");}
}

測試結果分析(不同機器可能有差異):

  • 異或運算耗時通常與與、或運算相近,均屬于高效位運算
  • 相比算術運算(如加法、乘法),位運算的耗時約為其1/10到1/5
  • 在加密、哈希等場景中,大量使用異或運算可顯著提升性能

五、異或運算的邊界情況與注意事項

5.1 異或運算的陷阱

(1)異或交換的限制
int a = 5;
a ^= a;  // a變為0,這是正確的
int b = 5, c = 5;
b ^= c ^= b ^= c;  // 這行代碼在Java中行為未定義,不可靠

在Java中,復合賦值表達式的運算順序是從左到右,但中間結果的存儲順序未定義,因此連續異或賦值可能導致意外結果。

(2)異或加密的安全隱患
byte[] data = "敏感信息".getBytes();
byte[] key = "弱密鑰".getBytes();
byte[] encrypted = encrypt(data, key);

使用弱密鑰(如重復、短長度)會導致加密失效,異或加密必須配合強密鑰管理策略。

5.2 異或運算的優化實踐

(1)利用異或實現快速歸零
int a = 0x1234;
a ^= a;  // 比a=0更高效?

在某些處理器中,a ^= a可能比a=0生成更高效的機器碼,但現代編譯器通常會將兩者優化為相同指令。

(2)異或運算替代條件判斷
// 傳統方式
int x = a > b ? a : b;
// 異或優化(僅適用于特定場景)
int diff = a - b;
int sign = (diff >> 31) & 1;
int x = a - diff * sign;

這種優化利用了異或的位操作特性,但代碼可讀性降低,需謹慎使用。

六、異或運算的前沿應用

6.1 異或在量子計算中的應用

在量子計算中,異或運算對應量子非門(X門)和受控非門(CNOT門),是構建量子電路的基礎門之一。CNOT門的量子電路表示如下:

┌───┐
│ X │
└─┬─┘│▼

其中控制位決定目標位是否執行異或操作,這是實現量子糾纏和量子算法的關鍵組件。

6.2 異或在區塊鏈中的應用

在區塊鏈的哈希算法中,異或運算用于混合不同數據的哈希值,例如在Merkle樹的構建過程中:

public class MerkleTree {private String[] hashes;public MerkleTree(String[] data) {// 計算葉子節點哈希hashes = new String[data.length];for (int i = 0; i < data.length; i++) {hashes[i] = hash(data[i]);}// 構建Merkle樹buildTree();}private void buildTree() {int level = hashes.length;while (level > 1) {int nextLevel = (level + 1) / 2;String[] newHashes = new String[nextLevel];for (int i = 0; i < nextLevel; i++) {int left = i * 2;int right = Math.min(left + 1, level - 1);newHashes[i] = hash(hashes[left] + "^" + hashes[right]); // 異或混合哈希值}hashes = newHashes;level = nextLevel;}}private String hash(String data) {// 實際應用中使用SHA-256等安全哈希算法return data;}
}

異或運算在哈希值混合中能有效破壞輸入與輸出的線性關系,增強哈希函數的抗碰撞性。

That’s all, thanks for reading!
覺得有用就點個贊、收進收藏夾吧!關注我,獲取更多干貨~

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

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

相關文章

Element Plus 去除下拉菜單周黑邊

問題&#xff1a; 如上圖所示&#xff0c;當鼠標移入&#xff08;hover&#xff09;和點擊時就會圍繞一圈黑色邊框&#xff0c;但通過本文的方案 100% 完美解決。 解決方案: :deep(:focus-visible) {outline: none; } 備用方案 :deep(.el-tooltip__trigger:focus-visible) …

React Native 項目實戰 —— 記賬本應用開發指南

React Native 項目實戰 —— 記賬本應用開發指南 項目概述&#xff1a;本文將指導您使用 React Native 開發一個簡單的記賬本應用&#xff0c;幫助用戶記錄收入和支出。核心內容&#xff1a;我們將分析功能模塊、設計接口、劃分組件結構、管理數據流、實現頁面跳轉&#xff0c…

從 PPO、DPO 到 GRPO:大語言模型策略優化算法解析

從 PPO、DPO 到 GRPO&#xff1a;大語言模型策略優化算法解析 背景與簡介 大語言模型&#xff08;LLM&#xff09;的訓練通常分為預訓練和后訓練兩個階段。預訓練階段&#xff0c;模型在海量文本上學習下一詞預測的能力&#xff1b;后訓練階段&#xff0c;我們希望進一步對齊…

React中使用Day.js指南

文章目錄 引言什么是Day.js&#xff1f;Day.js的核心特性 安裝和基礎配置安裝Day.js基礎導入和使用 在React中的基礎使用1. 顯示格式化日期2. 實時時鐘組件 常用插件配置1. 相對時間插件2. 高級格式化插件3. 時區處理插件 實戰案例&#xff1a;博客文章時間組件高級應用場景1. …

【系統設計【1】】系統設計面試方法論:從0到百萬用戶的需求到架構的推演

文章目錄 一、系統設計面試的底層邏輯&#xff1a;從需求到架構的推演&#xff08;一&#xff09;需求澄清&#xff1a;界定問題邊界&#xff08;二&#xff09;分層設計&#xff1a;從單節點到分布式的演進1. Web層&#xff1a;無狀態化與負載均衡2. 數據層&#xff1a;數據庫…

京津冀城市群13城市空間權重0-1矩陣

京津冀城市群13城市空間權重0-1矩陣 1、數據說明&#xff1a;京津冀13個城市&#xff1a;北京市、保定市、滄州市、承德市、邯鄲市、衡水市、廊坊市、秦皇島市、石家莊市、唐山市、邢臺市、張家口市、天津市、 2、指標解釋&#xff1a;空間權重矩陣是一種用于表征空間表達式的…

七大技術路線解析:自動駕駛如何被數據重新定義

自動駕駛技術從實驗室的算法驗證走向大規模量產應用&#xff0c;是一場充滿挑戰的征程。這段征程的核心驅動力&#xff0c;不僅是芯片和傳感器的升級&#xff0c;更是一場關于數據的“喂養”競賽——從簡單的像素標注到多模態大模型的理解&#xff0c;數據需求的演變悄然推動著…

計網復習知識(16)傳輸層及其協議功能

目錄 考研大綱 1.傳輸層概述 端口號 有連接/無連接傳輸 可靠/不可靠傳輸 2.UDP協議 2.1 udp數據報 2.2 udp檢驗 3.TCP協議 3.1 TCP協議的框架梳理 3.2 TCP報文段**** 3.3 三次握手與四次揮手 三次握手 四次揮手 3.4 可靠傳輸與流量控制 流量控制&#xff1a;滑動…

每天一個前端小知識 Day 1

語義化 HTML&#xff08;Semantic HTML&#xff09; 1. 什么是語義化 HTML&#xff1f; 語義化 HTML 指的是使用符合內容含義的標簽&#xff0c;而不僅僅為了布局或樣式。例如&#xff1a; <article>…</article> <nav>…</nav> <header>…&l…

在docker中部署mysql

部署 MySQL&#xff08;端口 9006&#xff09; 1. 創建數據目錄 mkdir -p ~/qihuang/mysql/data2. 啟動 MySQL 容器 docker run -d \--name mysql-qihuang \-p 9006:3306 \-v ~/qihuang/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORDroot \-e MYSQL_DATABASEqihuangdb…

JavaScript基礎-事件對象

一、前言 在前端開發中&#xff0c;用戶與頁面的交互行為&#xff08;如點擊按鈕、輸入文本、滾動頁面等&#xff09;都會觸發相應的事件。而這些事件發生時&#xff0c;瀏覽器會自動創建一個 事件對象&#xff08;Event Object&#xff09;&#xff0c;它包含了當前事件的所有…

藍橋杯_染色_bfs_Java

臨時抱抱佛腳&#xff0c;太浮躁了&#xff0c;藍橋杯已經快1個半月沒做題了。 本人比較菜&#xff0c;感覺這個時間節點也只能把暴力題給盡量多做做&#xff0c;找找做題手感&#xff0c;其他就純憑運氣了吧。T-T。 題目 問題描述 小藍有一個 n 行 m 列的白色棋盤, 棋盤的每一…

MySQL 究極奧義·動態乾坤大挪移·無敵行列轉換術

導入大SQL文件 [mysqld] # 大批量導入優化 bulk_insert_buffer_size1G max_allowed_packet1G innodb_autoextend_increment512M innodb_buffer_pool_size4G innodb_log_buffer_size4G innodb_log_file_size4G動態行列轉換 DROP TABLE IF EXISTS tb_score;CREATE TABLE tb_sco…

Excel大廠自動化報表實戰(互聯網金融-數據分析周報制作中)

這是Excel大廠自動化報表實戰第三期--互聯網金融-數據分析周報制作中 數據資源已經與這篇博客捆綁&#xff0c;有需要者可以下載通過網盤分享的文件&#xff1a;2.4自動化報表-8月成交數據.xlsx&#xff0c;2.4自動化報表-8月獲客數據.csv等2個文件 鏈接: https://pan.baidu.c…

langchain從入門到精通(七)——利用回調功能調試鏈應用 - 讓過程更透明

1. Callback 功能介紹 Callback 是 LangChain 提供的回調機制&#xff0c;允許我們在 LLM 應用程序的各個階段使用 hook &#xff08;鉤子&#xff09;。鉤子的含義也非常簡單&#xff0c;我們把應用程序看成一個一個的處理邏輯&#xff0c;從開始到結束&#xff0c;鉤子就是在…

如何使用Postman做接口自動化測試

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 本文適合已經掌握 Postman 基本用法的讀者&#xff0c;即對接口相關概念有一定了解、已經會使用 Postman 進行模擬請求等基本操作。 工作環境與版本&#xff1a; …

ELK日志文件分析系統——E(Elasticsearch)

目錄 基本概念 一、架構設計 二、核心原理 三、關鍵特性 四、應用意義 部署步驟 ?一、環境準備? ?二、安裝 Elasticsearch? ?三、關鍵配置&#xff08;elasticsearch.yml&#xff09;? ?四、啟動與驗證? ?五、集群擴展&#xff08;新增節點&#xff09;? …

融智學教育觀及其數學公式體系凝練匯總

摘要&#xff1a;本文系統闡述了鄒曉輝教授的融智學教育觀&#xff0c;通過原創數學公式體系構建了人機協同教育模型。核心內容包括&#xff1a;認知本體論&#xff08;文明智慧當量方程&#xff09;、方法論&#xff08;七遍通訓練算子&#xff09;、生態位控制論&#xff08;…

互聯網大廠Java求職面試:AI大模型應用實踐中的架構挑戰與實戰

互聯網大廠Java求職面試&#xff1a;AI大模型應用實踐中的架構挑戰與實戰 引言 在當今技術飛速發展的時代&#xff0c;AI大模型已成為企業數字化轉型的重要引擎。無論是內容生成、智能客服、個性化推薦&#xff0c;還是知識圖譜構建和語義理解&#xff0c;大模型的應用場景正在…

龜兔賽跑算法(Floyd‘s Cycle-Finding Algorithm)尋找重復數

龜兔賽跑算法&#xff08;Floyd’s Cycle-Finding Algorithm&#xff09;尋找重復數 問題描述 給定一個長度為 N1 的數組 nums&#xff0c;其中每個元素的值都在 [1, N] 范圍內。根據鴿巢原理&#xff0c;至少有一個數字是重復的。請找出這個重復的數字。 要求&#xff1a; …