Swift-數組中只出現一次的數字

題目:一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請找出這兩個只出現一次的數字。要求時間復雜度是O(n),空間復雜度是O(1).
核心代碼:
<pre><code>`

// 1首次出現的位置
func indexOfOne(num:Int) -> Int {
    var number:Int = num
    var pos:Int = 1
    
    while (number & 1) == 0 {
        number = number >> 1
        pos += 1
    }
    
    return pos
}

func isNumberOfPos(num:Int,pos:Int) -> Bool {

// let temp:Int = 1 << (pos - 1)
// return (num & temp) == 0 ? false : true

    let number:Int = num >> (pos - 1)
    return (number & 1) == 1 ? true : false
}

func findNumberAppearOnce(arr:[Int]) -> (Int,Int) {
    
    var ORNum:Int = 0
    
    for i in 0..<arr.count {
        ORNum = ORNum ^ arr[i]
    }
    
    let position:Int = indexOfOne(num: ORNum)
    var first:Int = 0
    var second:Int = 0
    for i in 0..<arr.count {
        if  isNumberOfPos(num: arr[i], pos: position) {
            first = first ^ arr[i]
        } else {
            second = second ^ arr[i]
        }
    }
    return (first,second)
}`</code></pre>

測試代碼:
<pre><code>var searchArr:[Int] = [2,4,4,7,3,2,5,5] var searchResult:(Int,Int) = searchNumber.findNumberAppearOnce(arr: searchArr) print("FlyElephant-\(searchArr)出現一次的兩個數字---\(searchResult)")</code></pre>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容