Swift

面试没做出来的算法

2024-04-22  本文已影响0人  Jack小麻雀_

题目在这里,现有1-100这100个数字,随机去掉两个数字后乱序存到了数组a中,请实现一个函数,入参为数组a,打印出被去掉的这两个数字。

思路:
1.排序
2.创建一个1~100的数组
3.对比两个数组

// 代码如下
func searchRemoved(arr:Array<Int>, originalCount:Int) -> Array<Int> {
    
    if originalCount <= 0 {
        return []
    }
    
    let sortedArr = arr.sorted { n, m in
        return n < m
    }
    
    var perfert = [Int]()
    
    for i in 0 ..< originalCount {
        perfert.append(i+1)
    }
    
    var result = [Int]()
    var m = 0   // big
    var n = 0   // small
    while m < originalCount && n < sortedArr.count {
            
        if perfert[m] < sortedArr[n] {
            result.append(perfert[m])
            m += 1
        } else if perfert[m] > sortedArr[n] {
            // 不应该出现这种情况
            n += 1
            print("error")
        } else {
            // 二者相等
            m += 1
            n += 1
        }
    }
    
    let needFix = originalCount - (sortedArr.count + result.count)
    if  needFix > 0{
        for i in 0 ..< needFix {
            if sortedArr.last != nil {
                result.append(sortedArr.last! + i + 1)
            }
        }
    }
    
    return result
}


// test
let test_1 = [7,2,3,5]
let result_1 = searchRemoved(arr: test_1, originalCount: 10)
print("test_1:\(test_1)\tresult:\(result_1)")

let test_2 = [3,4]
let result_2 = searchRemoved(arr: test_2, originalCount: 10)
print("test_1:\(test_2)\tresult:\(result_2)")

let test_3 = [5]
let result_3 = searchRemoved(arr: test_3, originalCount: 10)
print("test_1:\(test_3)\tresult:\(result_3)")

let test_4 = [5]
let result_4 = searchRemoved(arr: test_4, originalCount: 0)
print("test_1:\(test_4)\tresult:\(result_4)")

// log
test_1:[7, 2, 3, 5] result:[1, 4, 6, 8, 9, 10]
test_1:[3, 4]   result:[1, 2, 5, 6, 7, 8, 9, 10]
test_1:[5]  result:[1, 2, 3, 4, 6, 7, 8, 9, 10]
test_1:[5]  result:[]

上一篇 下一篇

猜你喜欢

热点阅读