(MEDIUM) https://leetcode.com/problems/maximum-length-of-repeated-subarray/
nums1 배열의 i번째와 nums2 배열의 j번째 element에서 시작한 공통 subarray의 길이
로 정의했다.class Solution:
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
n1_len = len(nums1)
n2_len = len(nums2)
dp = [[0] * n2_len for _ in range(n1_len)]
#i가 0일 때 dp 값 구하기
for i in range(n2_len):
dp[0][i] = 1 if nums1[0] == nums2[i] else 0
#j가 0일 때 dp 값 구하기
for i in range(n1_len):
dp[i][0] = 1 if nums1[i] == nums2[0] else 0
#나머지 경우일 때 dp 값 구하기
for i in range(1, n1_len):
for j in range(1, n2_len):
dp[i][j] = (dp[i-1][j-1] + 1) if nums1[i] == nums2[j] else 0
#구한 값들 중 최대값 반환
return max(max(row) for row in dp)
구한 값들에 대해 한 번에 max 값을 구하는 방식
이 훨씬 빨랐다. comparison 횟수도 동일한데, 30 ~ 40% 가량의 빠르기 차이가 나는 이유가 무엇일까 고민해보게 된다.