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を取り出すなんてこともしていない。無駄処理が多い…。
こういう常識みたいなのを知っていく必要がありそうだ…。