めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

Leetcodeを進める:easyのみ(6)

コード:GitHub - Y-kyoto/leetcode

他の問題:leetcode カテゴリーの記事一覧 - めも

Problem500

概要:入力として単語のリストが与えられる. 英字キーボードの特定の一行だけで打てる単語を見つける.

Python3

愚直な方法.

class Solution:
    def findWords(self, words: List[str]) -> List[str]:
        res = []
        d = {'Q': 0, 'W': 0, 'E': 0, 'R': 0, 'T': 0, 'Y': 0, 'U': 0, 
             'I': 0, 'O': 0, 'P': 0, 'q': 0, 'w': 0, 'e': 0, 'r': 0, 
             't': 0, 'y': 0, 'u': 0, 'i': 0, 'o': 0, 'p': 0, 
             'A': 1, 'S': 1, 'D': 1, 'F': 1, 'G': 1, 'H': 1, 
             'J': 1, 'K': 1, 'L': 1, 'a': 1, 's': 1, 'd': 1, 
             'f': 1, 'g': 1, 'h': 1, 'j': 1, 'k': 1, 'l': 1,
             'Z': 2, 'X': 2, 'C': 2, 'V': 2, 'B': 2, 'N': 2, 
             'M': 2, 'z': 2, 'x': 2, 'c': 2, 'v': 2, 'b': 2, 
             'n': 2, 'm': 2}
        
        for word in words:
            isAns = True
            lw = len(word)
            if lw==0:
                continue
            elif lw==1:
                res.append(word)
            else:
                for i in range(lw-1):
                    if d[word[i]]==d[word[i+1]]:
                        continue
                    else:
                        isAns = False
                        break

                if isAns:
                    res.append(word)
        
        return res

Runtime: 36 ms, faster than 67.67% of Python3 online submissions for Keyboard Row. Memory Usage: 13.9 MB, less than 6.67% of Python3 online submissions for Keyboard Row.

submission detail

Problem575

概要:与えられたキャンディのリストを二人に等しい数に分けるとき、最もたくさんの種類のキャンディーを持っている方は何種類のキャンディーを持っているか?

Python3

答えになりうる最大はキャンディーの半分の数。

class Solution:
    def distributeCandies(self, candies: List[int]) -> int:
        return int(min([len(set(candies)), len(candies)/2]))

Problem1002

概要:英単語がリストとして与えられるので、全てに共通して出現する文字を見つける. ooが全てに出現するなら o o も答えに含める.

Python3

はじめに最も短い単語を見つけて、その単語を対象にして文字が全ての単語に出現するかをチェック.

class Solution:
    def commonChars(self, A: List[str]) -> List[str]:
        res = []
        wordLengthList = [len(a) for a in A]
        mostShortWord = A[wordLengthList.index(min(wordLengthList))]
        
        for ci in mostShortWord:
            for i, ai in enumerate(A):
                if ci in ai:
                    A[i] = ai.replace(ci, '', 1)
                    continue
                else:
                    ci = ''
                    break
                    
            if not ci=='':
                res.append(ci)
                
        return res

Runtime: 52 ms, faster than 85.77% of Python3 online submissions for Find Common Characters. Memory Usage: 13.8 MB, less than 5.55% of Python3 online submissions for Find Common Characters.

submission detail

Problem1025

概要:N%2==0を返せばいいとわかる. (問題文)

Rust

impl Solution {
    pub fn divisor_game(n: i32) -> bool {
        return n%2==0;
    }
}

Runtime: 0 ms, faster than 100.00% of Rust online submissions for Divisor Game. Memory Usage: 2.4 MB, less than 100.00% of Rust online submissions for Divisor Game.

submission detail

Problem1051

class Solution {
public:
    int heightChecker(vector<int>& heights) {
        int res = 0;
        auto sortedh {std::vector<int>(heights)};
        std::sort(sortedh.begin(), sortedh.end());

        for(size_t i=0; i<sortedh.size(); i++)
            if(sortedh[i]!=heights[i]) res++;

        return res;
    }
};

Problem1078

概要:テキストが渡され、さらに二つの単語が渡される。テキスト中に二つの単語が連続している箇所が存在するとき、その次にきた単語を返す.

Python

愚直に一つずつチェック。wordi==firstの時のみ words[i+1]==secondが評価される.

class Solution:
    def findOcurrences(self, text: str, first: str, second: str) -> List[str]:
        res = []
        words = text.split(" ")
        if len(words)<2:
            return res
        else:
            for i, wordi in enumerate(words[:-2]):
                if wordi==first and words[i+1]==second:
                    res.append(words[i+2])
                else:
                    continue
        return res      
class Solution:
    def findOcurrences(self, text: str, first: str, second: str) -> List[str]:
        text = text.split(" ")
        textlen = len(text)
        res = []

        if textlen>1:
            for i in range(textlen-2):
                if text[i]==first and text[i+1]==second:
                    res.append(text[i+2])
        return res

Runtime: 40 ms, faster than 28.77% of Python3 online submissions for Occurrences After Bigram. Memory Usage: 14 MB, less than 100.00% of Python3 online submissions for Occurrences After Bigram.

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。