源代碼和底層代碼,不使用額外空間交換2個數據的源代碼

 2023-10-18 阅读 26 评论 0

摘要:  最近做求職筆試題,遇到比較有意思的題目,題目或多或少涉及到《劍指Offer》的思路和知識點,如果不是刷書兩遍,估計不會做出來,分享一下互相學習! ************************************************************ 1、不使用額外空

  最近做求職筆試題,遇到比較有意思的題目,題目或多或少涉及到《劍指Offer》的思路和知識點,如果不是刷書兩遍,估計不會做出來,分享一下互相學習!

************************************************************

1、不使用額外空間交換2個數據, 請寫出任意3種方法,并闡明其優缺點。

  樣例: int a = 2; int b = 3 ;
  不再聲明任何變量,使得 a = 3, b =2;

  解題思路:?部分參考自 http://www.cnblogs.com/cornucopia2015/p/4896791.html
  不使用中間變量而交換兩個數值變量的值,通常有三種做法:
1、加減法
  a = a + b; b = a - b; a = a - b;
  該方法可以交換整型和浮點型數值的變量,缺點是在處理浮點型的時候有可能會出現精度的損失。
2、乘除法
  a = a * b; b = a / b; a = a / b;
  該方法可以處理整型和浮點型變量,但在處理浮點型變量時也存在精度損失問題,而且乘除法比加減法要多一條約束:b必不為0,否則會報錯。
3、異或法
  a ^= b; // a=a^b
  b ^= a; // b=b^(a^b)=b^a^b=b^b^a=0^a=a
  a ^= b; // a=(a^b)^a=a^b^a=a^a^b=0^b=b
  這里需要用到異或運算的一個性質:任何一個數字異或它自己都等于0。異或法可以完成對整型變量的交換,對于浮點型變量它無法完成交換。
4、棧法 (需要額外空間,不推薦)
  push a; push b; pop a; pop b;
  使用反向的出棧順序來完成交換,它雖然沒有顯式的使用臨時變量,但還是會用到額外的存貯空間,不太符合題意。

源代碼和底層代碼。源代碼:

  https://github.com/wylloong/TinyPrograms/blob/master/Coding%20Interviews/ExchangeWithoutTemp.cpp

************************************************************
2、給定一個數組,數組中除了某個特定數字只出現1次,其余數字均出現2次。請編寫函數,找出該數字。要求,空間復雜度O(n),時間復雜度O(n)。
  1. 主程序需要包含對給定的2個測試文件的文件讀取操作。
  2. 請編寫計時器類,并且對每個文件樣例的輸入和運算時間進行測量。

  解題思路: Google面試題,必須結合異或的性質,任何一個數字異或它自己都等于0,參考《劍指Offer》的面試題56:數組中數字出現的次數。

源代碼:
  https://github.com/wylloong/TinyPrograms/blob/master/Coding%20Interviews/FindNumsAppearOnce.cpp

轉載于:https://www.cnblogs.com/DHUtoBUAA/p/7785029.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/150201.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息