thảo luận Leetcode contest, đường tới Guardian

À mấy fence cho mình hỏi thử sao bài 2 giải bằng DFS thì nó throws TLE nhỉ
Time complexity với space complexity chỉ là O(n) thôi mà, vì worst case ở mỗi trường hợp nó tăng lên từ 1 -> 10^5 thôi chứ nhỉ
Python:
from collections import deque

class Solution:
    def minOperations(self, k: int) -> int:
        visited = set()
        queue = deque()
        queue.append((0, 1, 1))
      
        while queue:
            operations, total, lastNum = queue.popleft()
          
            if total >= k:
                return operations
          
            if (total, lastNum) in visited:
                continue
          
            visited.add((total, lastNum))
          
            queue.append((operations + 1, total + lastNum, lastNum))
            queue.append((operations + 1, total + 1, lastNum + 1))
          
        return -1
Thuật toán này có Time complexity là 1 + 2 + 4 + 8 + .. + 2^k = 2^(k+1) - 1 = O(2^k) rồi bạn.
 
Sao lại 2^K đc nhỉ, 2^K thì k = 16 là chết à, cũng như bfs thông thường thôi mà chỉ là O(n) thôi chứ


via theNEXTvoz for iPhone
BFS O(n) thì n là số đỉnh trong đồ thị. Trong thuật toán của bạn thì những giá trị total (2,...,k-1) sẽ được thăm nhiều lần.
Edit: Mình không lập trình trên python. Có đoạn code "if (total, lastNum) in visited" thì mình hiểu là nếu một cặp (total, lastNum) đã gặp rồi thì bỏ qua, nhưng (total, lastNum nào đó) thì sẽ được xét các lân cận.
 
BFS O(n) thì n là số đỉnh trong đồ thị. Trong thuật toán của bạn thì những giá trị total (2,...,k-1) sẽ được thăm nhiều lần.
Edit: Mình không lập trình trên python. Có đoạn code "if (total, lastNum) in visited" thì mình hiểu là nếu một cặp (total, lastNum) đã gặp rồi thì bỏ qua, nhưng (total, lastNum nào đó) thì sẽ được xét các lân cận.
Ừ cũng đúng nhỉ, để mình tính toán lại xem sao. Thanks fence. Do mình nghĩ tối đa thì mình chỉ có K đỉnh trong đồ thị thôi, nhưng mà ko phải rồi vì cache kiểu này nó sẽ là O(k*lastNum) nên worst case sẽ là O(n^2) chứ ko phải O(n)
 
Last edited:
Ừ cũng đúng nhỉ, để mình tính toán lại xem sao. Thanks fence. Do mình nghĩ tối đa thì mình chỉ có K đỉnh trong đồ thị thôi, nhưng mà ko phải rồi vì cache kiểu này nó sẽ là O(k*lastNum) nên worst case sẽ là O(n^2) chứ ko phải O(n)
Mình tính sai cái time complexity rồi. Phải là O(n^2) như bạn tính mới đúng.
 
À mấy fence cho mình hỏi thử sao bài 2 giải bằng DFS thì nó throws TLE nhỉ
Time complexity với space complexity chỉ là O(n) thôi mà, vì worst case ở mỗi trường hợp nó tăng lên từ 1 -> 10^5 thôi chứ nhỉ
Python:
from collections import deque

class Solution:
    def minOperations(self, k: int) -> int:
        visited = set()
        queue = deque()
        queue.append((0, 1, 1))
      
        while queue:
            operations, total, lastNum = queue.popleft()
          
            if total >= k:
                return operations
          
            if (total, lastNum) in visited:
                continue
          
            visited.add((total, lastNum))
          
            queue.append((operations + 1, total + lastNum, lastNum))
            queue.append((operations + 1, total + 1, lastNum + 1))
          
        return -1
Em chạy thử thấy k = 3819 là đã TLE rồi, chắc test case bài này khá chặt, phải giải dưới O(n^2) thì mới qua
 
1711557582453.png

Cày sml ăn quả rank 13k4 mất toi 30 điểm huhu.
Đúng bài contest Q4 dễ nữa chứ =((
 
Lần này làm Q1 Q2 mất gần 35 phút, còn Q3 Q4 chịu
Từ nay không dám làm leetcode biweekly nữa, buổi tối mạng lag mất thời gian Q1 quá
 
e code 1+3 trc, 15ph la xong e dung bin search nen ko can nghi gi nhieu. cau 2 doc de sai code mat 15ph + 2 bug, con 1h cau 4 ma ko nghi ra dc gi:too_sad:
 
Back
Top