#はじめに
こんばんは.
M1就活生がLeetCodeから,easy問題を中心にPythonを用いて解いていきます.
↓では,解いた問題のまとめを随時更新しています.
まとめ記事
#問題
今回解いたのは,難易度easyから 問題35のSearch Insert Position です.
問題としては,整数でソートされた入力配列nums
と,入力値target
が与えられたとき,target
の入る位置(順番,インデックス)を返すというもの.
入力例と出力例は以下の通りです.
Example 1:
Input: nums = [1,3,5,6], target = 5
Output: 2
Example 2:
Input: nums = [1,3,5,6], target = 2
Output: 1
Example 3:
Input: nums = [1,3,5,6], target = 7
Output: 4
Example 4:
Input: nums = [1,3,5,6], target = 0
Output: 0
Example 5:
Input: nums = [1], target = 0
Output: 0
#書いたコード
繰り返しの処理を用いて解いてみました.整数でソートされた入力配列nums
の先頭要素から順番に,入力値target
との大きさを比較していきます.nums[i]
がtarget
以上の値の場合,そのインデックスであるi
を返します.そして,最後まで条件に当てはまらなかった場合はnums
のどの値よりも大きいとして,リストの配列数を返すことで,実質的にリストの最後のインデックスを返します.なお,今回の問題では,nums
があらかじめソートされているので,このようにシンプルな計算で記述できています.
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
for i in range(len(nums)):
if nums[i] >= target:
return i
return len(nums)
ほかにも,Pythonの議論でとてもわかりやすいコードを見つけたので紹介します.
それが以下のコードで,nums
にtarget
が存在すれば,nums
内のtarget
の値におけるインデックスを,存在しなければ,nums
にtarget
を追加し,ソートした後のインデックスを返すというものです.やっていることがとても簡潔でわかりやすく,Pythonを深く理解していなければこのコードは書けないなと,見つけたときに感動しました.
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if target in nums:
return nums.index(target)
else:
nums.append(target)
nums.sort()
return nums.index(target)
#おわりに
言語を深く理解することこそが,わかりやすく読みやすいコードを書けることに繋がるのだと感じました.さらにさらに練習を重ねて,言語理解を深めたいと思います.
今回書いたコードはGitHubにもあげておきます.