1027. Longest Arithmetic Subsequence

유승선 ·2025년 2월 24일
0

LeetCode

목록 보기
124/125

오늘도 어김 없이 DP 문제를 풀어봤는데 유독 이 문제는 잘 안풀려서 고민을 하였고 답을 보고도 잘 이해가 안갔기에 다시 풀 목적으로 기록을 해본다. 일단 Single DP 로도 풀 수 있지 않을까? 생각은 해봤는데 Single DP 로 풀경우에 테스트 케이스를 절대 다 통과하지 못했다. 왜 일까? 이유는 간단한데 Single DP 로는 필요한 값을 모두 저장하기 어렵기 때문이다.

의외로 유투브 영상에서 해답을 찾을 수 있었다. [9,4,7,2] 리스트가 있을 떄, longest difference 는 [4,7] 은 3이 될 수 있고 [9,7] 처럼 -2가 될 수 도 있다. 즉, 7의 인덱스에서 3이나 -2의 difference 를 전부 가질 수 있는 것이기 때문에 LIS 문제를 풀었던 것 처럼 내 앞에 있는 숫자가 가지고 있는 Longest difference 가능성을 전부 저장하고 합을 구해야지 최대 값이 나올 수 있다.

좀 어려운 문제라고 느꼈지만 그래도 패턴만 잘 익히면은 괜찮을 문제같기도 하다.

class Solution {
public:
    int longestArithSeqLength(vector<int>& nums) {
        map<int,map<int,int>> dp; 
        int max_ = 2; 
        for(int i = 1; i < nums.size(); i++){
            for(int j = 0; j < i; j++){
                int diff = nums[i] - nums[j]; 
                if(dp[j].count(diff)){
                    dp[i][diff] = max(dp[i][diff], dp[j][diff] + 1); 
                    max_ = max(max_, dp[i][diff]); 
                } else{
                    dp[i][diff] = 2; 
                }
            }
        }
        return max_; 
    }
};
profile
성장하는 사람

0개의 댓글

관련 채용 정보