Leetcode) Contains Duplicate


Top Interview Questions
Easy Collection
Link of Problem
LEVEL : 🌕 🌑 🌑 🌑 🌑 (最小)
EasyCollectionの4番目の問題Contents Duplicateに答えました
1つ目の問題は、重複が解消された場合、この問題は重複が存在するかどうかを決定することです.
前に繰り返し検索をしたことがあるので,同様の方法で解いた.

1𗞚𗞚第1の方法


1つ目の方法は論理タイムアウトです.
前回もタイムアウトでしたが、今回の問題もタイムアウトしました.
基本的な二重for文で書かれているので、作成時からタイムアウトが発生すると思います.
問題の原因
1<=element数<=10^5は配列サイズが大きすぎるため、数値が大きくなるにつれてタイムアウトの問題が発生する可能性があります.これは私が問題を解くときに予想した部分です.
func containsDuplicate(_ nums: [Int]) -> Bool {
    guard nums.count > 1 else { return false }
    
    for i in 0..<nums.count-1 {
        for j in i+1..<nums.count {
            if nums[i] == nums[j]{
                return true
            }
        }
    }
    return false
}

2▼▼▼第1の方法


遠く離れた数字をどうチェックして重複しているかを考えています.
遠く離れていたら貼ればいいです
まず並べ替えて、両方に同じ数字があるかどうかを確認します.
func containsDuplicate(_ nums: [Int]) -> Bool {
    guard nums.count > 1 else { return false }
    
    let num = nums.sorted()
    
    for index in 1..<nums.count {
        if num[index] == num[index-1]{
            return true
        }
    }
    return false
}
numsは私が書いたようにINOUTではないのでnumという配列を別に使いました.
numの要素の両方に同じ数字がある場合、trueを返す論理を記述します.
第2の方式のRuntimeは中程度の速度を持っている.

3ππ第1の方法


3つ目の方法は、見ただけでどうして私が思わなかったのかを考えることです.
繰り返すのが嫌なセットでセットに入るnumsの個数とnumsの個数を比較することです
重複がある場合、Setに入る要素の数はnumsのみの要素の数とは異なります.
func containsDuplicate(_ nums: [Int]) -> Bool {
    nums.count != Set(nums).count
}
1行しかありません.どうして思いもよらなかったのですか.
缲り返したらセットを书いて今回の问题でどうしてできなかったのかとずっと思っていたのですが….🥲
私はもっとアルゴリズムを作るように努力します.