另一道看上去很嚇人的面試題:如何交換a和b兩個整數的值,不用額外空間 (Rev. 2)
這個題貌似完全顛覆一般的Logic:交換兩個整數需要一個額外的空間用於儲存:
t = b;
b = a;
a = t;
粗看上去似乎沒有辦法,但是仔細想一下,既然不能用額外的空間,那麼能用的方法就只有數學方法,也許有效,那麼第一個想法就是用A+b看看,稍微想一下就可以得到下面這個解法:
a = a + b;
b = a - b;
a = a - b;
b = a - b;
a = a - b;
還有更絕的(由DxZ網友提供):
a = a ^ b;
b = a ^ b;
a = a ^ b;
b = a ^ b;
a = a ^ b;
其實很多這樣的題目並不難,只是需要一點點的Think outside the box :)
相關文章
- 異或運算的巧用 → 不用額外的變數,如何交換兩個變數的值?變數
- 一道看上去很嚇人的演算法面試題:如何對n個數進行排序,要求時間複雜度O(n),空間複雜度O(1)演算法面試題排序時間複雜度
- php不用第三個變數,交換兩個數的值PHP變數
- 如何交換兩個變數的值變數
- 不用第三個變數,直接交換兩個變數的值變數
- java 給出兩個整數a和b , 求他們的和。不用用運算子+Java
- 面試題-JavaScript交換兩個變數的方法面試題JavaScript變數
- 不用第三個變數,交換變數的值變數
- Swift交換兩個變數的值Swift變數
- Python面試技巧-交換兩個元素的值Python面試
- C++ 引用 (交換兩個數的值)C++
- C++取反交換兩個數的值C++
- 如何不使用臨時變數,交換兩個變數的值。變數
- C的兩個數值交換(Android之JNI)Android
- 不使用臨時變數交換兩個變數的值變數
- js不使用第三個變數交換兩個變數的值JS變數
- 劍指offer面試題11 數值的整數次方面試題
- 【C語言】給定兩個整型變數的值,將兩個值的內容進行交換C語言變數
- 面試題:一道關於解構賦值和引數預設值的程式設計題面試題賦值程式設計
- C語言交換兩個變數的值的5種基本方法C語言變數
- JavaScript實現兩個數的交換JavaScript
- JavaScript兩個變數交換值(不使用臨時變數)JavaScript變數
- 交換兩個變數變數
- 從一道沒人能答對的面試題聊聊Java的值傳遞面試題Java
- 一個菜雞技術人員,很另類的總結
- 一道賦值面試題引發的思考賦值面試題
- 面試題解:輸入一個數A,找到大於A的一個最小數B,且B中不存在連續相等的兩個數字面試題
- python 交換兩個變數的方式Python變數
- mysql交換兩行或兩列的值MySql
- 找出一堆整數中兩個元素和為指定值的所有組合
- 交換兩個整型變數變數
- 'abc' 轉換成[a, b, c]一道面試題的思考面試題
- 如何計算兩個時間間隔的天數
- 看上去很美實際上很亂 電商滲透汽車整個產業鏈產業
- C++ 一種交換兩個數的思路C++
- Matlab 隨機生成兩個數值之間的隨機數Matlab隨機
- 2 Day DBA-管理Oracle例項-重新宣告不用的表空間-關於可以被重新宣告的不用表空間Oracle
- 在 Linux 上如何清除記憶體的 Cache、Buffer 和交換空間Linux記憶體