剑指 Offer II 075. 数组相对排序

2022-06-24  本文已影响0人  邦_

这道题说实话。我看了好久才明白它的意思。。
按照数组二的顺序进行排序。。
比方说数组一是[2,3,1,3,2,4,6,7,9,2,19]
数组二是[2,1,4,3,9,6]
那么按照数组二排序的话 所有的2排在前边。然后是所有的1 所有的4 ...
最后二里面没有包含的按照升序排在最后边。。

截屏2022-06-24 11.00.00.png
func relativeSortArray(_ arr1: [Int], _ arr2: [Int]) -> [Int] {
             
        var map = Dictionary<Int,Int>()
        var res = arr1
        for num in arr1 {
            if let count = map[num] {
                 map[num] = count + 1
                
            }else {
                map[num] = 1
            }
            
        }
        //用来记录插入元素位置
        var index = 0
     
        for num in arr2 {
            
            if let count = map[num] {
                
                for _ in 0..<count {
                    res[index] = num
                    if let mapCount = map[num] {
                        
                        map[num] = mapCount - 1
                        if mapCount - 1 == 0 {
                            map.removeValue(forKey: num)
                        }

                    }
                    index += 1
                }
                                
            }

        }
        
        let keyArray = map.keys.sorted()
        for keyNum in keyArray {
            //剩余元素的个数
            let keyCount =  map[keyNum]!
            for _ in 0..<keyCount {
                res[index] = keyNum
                index += 1

            }

        }
        return res
    }






上一篇下一篇

猜你喜欢

热点阅读