Programmers.失敗率


問題の説明


失敗率は次のように定義されます.
  • ステージに到達したがクリアされていないプレイヤー数/ステージのプレイヤー数
  • ステージ総数N
    ゲームを使用するユーザが、現在停止しているステージ番号を含む配列フェーズをパラメータとして取得する場合.
    解関数を完了し、失敗率の高いステージからステージ番号を含む配列を降順に返します.

    問題を解く


    私の答え

    import Foundation
    
    func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    
        var failure: [Int: Float] = [:]
        var player: Int = stages.count
    
        for i in 1...N {
            let n = stages.filter { $0 == i }.count
            failure[i] = Float(n)/Float(player)
            player -= n
        }
    
        return failure.sorted(by: <).sorted(by: { $0.value > $1.value }).map {$0.key}
    }
    テスト5、テスト9、テスト22にタイムアウトが発生しました.
    import Foundation
    
    func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    
        var failStage: [Int: Int] = [:]
        for stage in stages {
            if !failStage.isEmpty && failStage.keys.contains(stage) {
                failStage[stage]! += 1
                continue
                }
            failStage[stage] = 1
        }
    
        var result: [(stage: Int, value: Double)] = []
        var successPeople: Int = stages.count
        for stage in 1...N {
            if !failStage.keys.contains(stage) {
                result.append((stage, 0))
                 continue
                 }
            result.append((stage, Double(failStage[stage]!) / Double(successPeople)))
    
            successPeople -= failStage[stage]!
        }
        
        result.sort { return $0.value == $1.value ? $0.stage < $1.stage : $0.value > $1.value }
        return result.map { $0.stage }
    
    }
    正常完了スコア

    辛いところ


    時間の複雑さを考慮せずに問題を解決する.
    高次関数がスロー関数であることを知らなかったためタイムアウトが発生した.
    最終的にネット上で他の人のブログを閲覧して、間違いの原因を見つけて、彼らのコードを見て、勉強しながら、コードを書き直しました.

    问题的短片