hàm exec, delete task chưa fen
Q3 làm ntn đấy fen
rồi ấy báchàm exec, delete task chưa fen

DP[nums][gap] là dãy dài nhất kết thúc tại nums có chênh lệch hiện tại >= gap ấy fence. Dùng 1 HashSet<> để check nums nào đã có rồi, sau đó tại mỗi vị trí, for hết gap (0->299) rồi update DP. Sau khi update xong, for ngược của dp[nums] để update max bằng gap lớn hơnQ3 làm ntn đấy fen
3 số này gắt quá bác
nhìn giống hàm add sai lắm. add thêm 0-p26 vào thành top luôn, nhìn vẫn còn 8-p22 bé hơn
Cái key của bài 3 là nếu longest subsequence của DIFF ở index i là DP[DIFF] là max của DP[K] với K <= DIFF để giảm một chiều DP xuống thành ON*D thay vì ON*D*D.
Ngu vl thế mà nhìn ko ra![]()
class Solution:
def longestSubsequence(self, nums: List[int]) -> int:
n = len(nums)
m = 301
dp = defaultdict(int) # number, difference
for num in nums:
best = 1
for diff in range(m - 1, -1, -1):
best = max(best, dp[(num + diff, diff)] + 1, dp[(num - diff, diff)] + 1)
dp[(num, diff)] = best
return max(dp.values())

Lần đầu top 200 nghe hawaii hơn ấy bác




sort lại, mỗi i thì xét ở l hất lên, hoặc r hất về, ko xét ở giữalại 2Q gang, có ý tưởng Q3 bisect mà implement khó quá![]()
chỗ này sao kg xét ở giữa vậy bácsort lại, mỗi i thì xét ở l hất lên, hoặc r hất về, ko xét ở giữa