Open5

LeetCodeログ

mishmish

英会話が習慣になってきたのでこちらも習慣化したいと思いスクラップを開設
簡単なのから定期的に解いていくぞ!

言語はいつも触ってるTSから始めるのですが他の言語でも書きたい気持ち。毎回同じ言語の方がいいのかなとは思います。

mishmish

4/10

1. Two Sum

  • 言語:TS

メモなど

  • 空の配列が渡されるケースは考慮しなくてもいいっぽい?
  • 絶対答えが存在する前提なので配列の長さが2だったらそのままindex[0,1]返すで良さそう
    • と思ったけどこういう細かいケースに個々に対応するより1つの解でカバーするのが良さそう
    • 試しにこれを回答に含めたら10msくらい速くなった

以下の思いついた方法を試してみる

  • targetと同じ値がいるかチェック
    • いる場合は配列内の0を探す
      • これも別に要らなかった
  • 総当たり
    • 総当たりしてみてそこからより良くする方法を探してね、とヒントに書いてありました
  • HashMap使う方法
    • 最終的にこれを使いました
提出した回答
const seen = {} 
for (let i = 0; i < nums.length; i++) {
    // targetと今見てる値の差分が探したい値なのでseenにすでにいるか見る
    const diff = target - nums[i] 
    if (diff in seen){
        // HashMapに値がいればindexを取得してreturn
        return [seen[diff], i]
    } else {
        // いなければ処理を続行
        seen[nums[i]] = i
    }
}

https://leetcode.com/problems/two-sum/submissions/1228385019?source=submission-ac

感想

  • 大体初めにパッと思いつくやり方は間違ってる
    • ヒント見ながら考えるのが楽しい
mishmish

4/11(wip)

以下の思いついた方法を試してみる

  • 一番左の数の次がゼロだった場合無条件で対象としたい
    • 合計2桁減るので優先度高
  • 右隣の値と比較して大きい方を消していく?
    • 左に行けば行くほど優先度が低くなるよね
    • なんかもっと厳密にやる方法があるはずだけど知識がない
提出した回答
//wip

学び

感想

  • この問題見てmonotonic stackじゃん!って思える脳みそに早くなりたいです(Discussion見てなるほどってなりました)
mishmish

4/29

9. Palindrome Number
言語:TS

思いついた方法を試してみる

  • 負の値と一桁は早期リターン
  • 二桁は同じ値かをチェックして判定
  • それ以外を判定
提出した回答
function isPalindrome(x: number): boolean {
    // 負の値を早期リターン
    if (x < 0) {
        return false
    }
    const arr = [...x.toString()]
    // 1桁しかない場合は早期リターン
    if(arr.length === 1){
        return true
    }
    // 2桁しかない場合も早期リターン
    if(arr.length <= 2){
        if (arr[0] === arr[1]){
            return true
        }
        return false
    }
    const len = Math.floor(arr.length / 2)
    const value: string = arr.slice(0, len).join()
    const value2: string = arr.reverse().slice(0, len).join() 
    // palindromeをチェック
    const isPalindrome = value === value2

    return isPalindrome
};

学び

https://www.youtube.com/watch?v=OlTk8wM48ww

  • 文字列の比較ではなく数値として扱う答えがある
mishmish

4/29

3110. Score of a String
言語:TS

提出した回答
function scoreOfString(s: string): number {
    const arr = []
    for (let i = 0; i <= s.length -2; i++){
        let ascii1 = s.charCodeAt(i)
        let ascii2 = s.charCodeAt(i + 1)
        arr.push(Math.abs(Number(ascii1) - Number(ascii2)))
    }
    // 全部足す
    let sum = 0
    for (let i = 0; i <= arr.length -1; i ++){
        sum += arr[i]
    }
    return sum
};

学び

  • console.log()が含まれた状態で提出するとスピードにめっちゃ影響してることがわかる
  • s.charCodeAt(i)を初めて知りました
  • 言語によってはcharをnumberに変換するとASCIIになるらしい(Discussionに書いてありました)