LeetCodeでちょっと勉強する

LeetCodeというサイトを知った

競技プログラミングや企業採用時のコーディングテスト対策に使われる「LeetCode」というサイトがあるようで、 ちょっと試しに1問といてみた。

設問

「Shuffle the Array」という、難易度としては低いらしい問題で、配列の並べ替えのようだ。 [x1,x2,x3...xn,y1,y2,y3...yn]という配列を`[x1,y1,x2,y2,x3,y3,...xn,yn]という形に並び替えるらしい。

私の書いたコード

class Solution:
    def shuffle(self, nums: List[int], n: int) -> List[int]:
        numsx = nums[:n]
        numsy = nums[n:]
        i = 0
        returnnums = []
        
        while i < n:
            returnnums.append(numsx[i])
            returnnums.append(numsy[i])
            i += 1
            
        return returnnums

xの値とyの値を取り出して、新しい配列にx y x yと順に追加するコードを書いた。

正解はしたものの、以下のような感じのメッセージが記載された。

Runtime: 56 ms, faster than 95.07% of Python3 online submissions for Shuffle the Array.
Memory Usage: 14.1 MB, less than 14.06% of Python3 online submissions for Shuffle the Array.

どうやら、速度はまぁいいけどメモリ使用量が多いよ!みたいなことが書いてあるようだ。

メモリ使用量の少ないコードは以下のようだ

class Solution:
    def shuffle(self, nums: List[int], n: int) -> List[int]:
        res = []
        for i in range(n):
            res.append(nums[i])
            res.append(nums[n + i])
        return res

なるほど、range(n)を使えばfor文で回せるのか、とかなり初歩的であろう気づきを得る。 そしてどうやらforのほうが処理も早いらしい。じゃあ速度はいいけど、っていうのも信頼性がないな。論外っぽいぞ…

あと、上のコードはわざわざいちいちxとyを取り出すなんてこともしていない。無駄処理が多い…。

こういう常識みたいなのを知っていく必要がありそうだ…。