💡

ゼロから始めるLeetCode Day5「2057. Smallest Index With Equal Value」

に公開

概要

海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインでだそうです。

その対策としてLeetCodeなるサイトで対策を行うようです。

※LeetCodeとは
本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトです。

せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていきます。

LeetCode

未経験のエンジニアなので、基本的に簡単なもの(easyでacceptanceが高い順)から解いていきます。

問題

1030. Matrix Cells in Distance Order

与えられた0から始まるインデックスを持つ整数の配列numsから、インデックスiを10で割った余り (i mod 10) が、そのインデックスの要素の値 (nums[i]) と等しい最も小さいインデックス i を見つけて返してすもの。
存在しない場合は、-1 を返す。

例1:
入力: nums = [0,1,2]
出力: 0
説明:
i=0: 0 mod 10 = 0 == nums[0]
i=1: 1 mod 10 = 1 == nums[1]
i=2: 2 mod 10 = 2 == nums[2]
すべてのインデックスはi mod 10 == nums[i]なので、最小のインデックス0を返す。

例2:
入力: nums = [4,3,2,1]
出力: 2
説明:
i=0: 0 mod 10 = 0 != nums[0]
i=1: 1 mod 10 = 1 != nums[1]
i=2: 2 mod 10 = 2 == nums[2]
i=3: 3 mod 10 = 3 != nums[3]
2は、i mod 10 == nums[i]を持つ唯一のインデックスである。

例3:
入力: nums = [1,2,3,4,5,6,7,8,9,0]
出力: -1
説明:
i mod 10 == nums[i]を満たすインデックスはない。

制約条件:
1 <= nums.length <= 100
0 <= nums[i] <= 9

解法

class Solution:
    def smallestEqual(self, nums: List[int]) -> int:
        for i in range(len(nums)):
            if i % 10 == nums[i]:
                return i
        return -1

現在のインデックスiを10で割った余り (i % 10) を計算し、
余りと配列のインデックスiにある要素の値 (nums[i]) を比較する。

i % 10nums[i]が等しいならば、そのインデックスを返す。

もし配列の最後まで確認しても、条件を満たすインデックスが一つも見つからなかった場合は、-1 を返す。

nums = [4,3,2,1]

nums[i] i mod 10 i % 10 == nums[i]
4 0 % 10 = 0
3 1 % 10 = 1
2 2 % 10 = 2
1 3 % 10 = 3
  • 出力: 2
EMP Tech Blog

Discussion