thảo luận Leetcode mỗi ngày

  • Người tạo chủ đề Người tạo chủ đề _Gia_Cat_Luong_
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Sửa lần cuối:
0FFPAjM.png
đù vãi leetcode sập à?

Untitled.png
 
Contest sáng nay C1 ez, C2 math, C3 làm kiểu straitforward cứ thêm số tiếp theo thì check với các số trong subarr trước đó.
C4 cảm giác chỉ cần dùng heap push pop mô phỏng lại thôi mà còn 45p cx ko xong đc :(
https://leetcode.com/contest/weekly-contest-309/problems/meeting-rooms-iii/
Sao bài 3 tui bị sai test case này nhỉ:

Python:
nums = [84139415, 693324769, 614626365, 497710833, 615598711, 264, 65552, 50331652, 1, 1048576, 16384, 544, 270532608, 151813349, 221976871, 678178917, 845710321, 751376227, 331656525, 739558112, 267703680]

dp = [1 for _ in range(len(nums))]
for i in range(1, len(dp)):
    flag = 0
    for j in range(i-1, i - dp[i-1] - 1, -1):
        if nums[j] & nums[i] != 0:
            dp[i] = 1
            flag = 1
            break
    if flag == 0:
        dp[i] = dp[i-1] + 1
    else:
        dp[i] = 1
        
for i in range(len(dp)):
    print(i, dp[i])
    
print(max(dp))
 
h1kRuMc.jpg
mà thôi kệ, done

Nãy đọc đề không kỹ, tưởng chỉ ưu tiên từ trên xuống, từ trái qua. Thật ra có ưu tiên giá trị val node nữa

Untitled.png


Java:
class Solution {
    public List<List<Integer>> verticalTraversal(TreeNode root) {
        ArrayList<Tuples> tmp = new ArrayList<>();
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        preorderTraversal(root, tmp, 0, 0);
        Collections.sort(tmp);
        ans.add(new ArrayList<>());
        ans.get(0).add(tmp.get(0).val);
        int prevX = tmp.get(0).x;
        for(int i = 1; i < tmp.size(); i++)
        {
            if(tmp.get(i).x != prevX)
            {
                ans.add(new ArrayList<>());
                ans.get(ans.size() - 1).add(tmp.get(i).val);
            }
            else
            {
                ans.get(ans.size() - 1).add(tmp.get(i).val);
            }
            prevX = tmp.get(i).x;
        }
        return ans;
    }
    public void preorderTraversal(TreeNode root, ArrayList<Tuples> tmp, int x, int y)
    {
        if(root == null)
        {
            return;
        }
        tmp.add(new Tuples(x, y, root.val));
        preorderTraversal(root.left, tmp, x -1, y - 1);
        preorderTraversal(root.right, tmp, x + 1, y - 1);
    }
}
class Tuples implements Comparable<Tuples> {
    public int x;
    public int y;
    public int val;
    Tuples()
    {
        x = 0;
        y = 0;
        val = 0;
    }
    Tuples(int x, int y, int val)
    {
        this.x = x;
        this.y = y;
        this.val = val;
    }
    @Override
    public int compareTo(Tuples o)
    {
        if(this.x == o.x)
        {
            if(this.y == o.y)
            {
                if(this.val == o.val)
                {
                    return 0;
                }
                return (this.val < o.val) ? -1 : 1;
            }
            return (this.y > o.y) ? -1 : 1;
        }
        return (this.x < o.x) ? -1 : 1;
    }
}
 
OG0lsXv.png
mà cùng cái code mà cái này submit nhanh hơn 99%

Bọn leetcode này không biết benchmark à?

Untitled.png
 
C2 math ntn vậy thím. T làm kiểu ngây thơ dùng đệ quy + memoi mà dùng python nên k chạy nổi xong bỏ luôn.
Python:
class Solution:
    def numberOfWays(self, startPos: int, endPos: int, k: int) -> int:
        if (k + endPos - startPos) % 2 != 0:
            return 0
      
        positive = (k + endPos - startPos) // 2
        negative = k - positive
      
        if negative < 0:
            return 0

        def cnk(n, k):
            M = 1000000007
            f = [[0 for x in range(n-k + 1)] for _ in range(k + 1)]

            for i in range(k + 1):
                for j in range(n-k + 1):
                    if j == 0 or i == 0:
                        f[i][j] = 1
                        continue

                    f[i][j] = (f[i][j-1] % M + f[i-1][j] % M) % M

            return f[k][n-k]

              
        return cnk(positive + negative, positive)

ban đầu cũng đệ quy xong bị tràn stack, thế là phải lên mạng kiếm code tổ hợp chập k của N
code dp dựa trên tam giác pascal
 

Tệp đính kèm

  • 1662267263501.png
    1662267263501.png
    15 KB · Lượt xem: 67
C2 math ntn vậy thím. T làm kiểu ngây thơ dùng đệ quy + memoi mà dùng python nên k chạy nổi xong bỏ luôn.
Gọi a,b là số bước right và left. Thì ta có a+b=k,a-b=endPos-startPos. Như vậy là tính đc a và b.
Giờ thì số cách là số cách sắp xếp các bước left và right trong k, vậy nên đáp án là tổ hợp chập a của k C(a,k)
https://leetcode.com/contest/weekly-contest-309/submissions/detail/790918409/

ban đầu cũng đệ quy xong bị tràn stack, thế là phải lên mạng kiếm code tổ hợp chập k của N
code dp dựa trên tam giác pascal
Có hàm factorial mà bác :D
 
Sửa lần cuối:
Gọi a,b là số bước right và left. Thì ta có a+b=k,a-b=endPos-startPos. Như vậy là tính đc a và b.
Giờ thì số cách là số cách sắp xếp các bước left và right trong k, vậy nên đáp án là tổ hợp chập a của k C(a,k)
https://leetcode.com/contest/weekly-contest-309/submissions/detail/790918409/
à fen dùng giai thừa, tui vừa xem bọn nó discuss còn có cái nhanh hơn

>> from math import comb
>> comb(4,2)
6
 
@Lập Trình Viên Số Khổ hình như ở chỗ này
Mã:
    for j in range(i-1, i - dp[i-1] - 1, -1):
        if nums[j] & nums[i] != 0:
            dp[i] = 1
            flag = 1
            break
gán dp=1 luôn là ko đúng vì như thế là bác bỏ hết mấy cái j trước đó rồi
E idea cũng giống bác nhưng viết thế này
Python:
class Solution:
    def longestNiceSubarray(self, nums: List[int]) -> int:
        dp=[1]*len(nums)
        res=1
        for i in range(1,len(nums)):
            for j in range(i-1,i-1-dp[i-1],-1):
                if nums[i]&nums[j]==0:
                    dp[i]+=1
                else:
                    break
            res=max(dp[i],res)
        return res
 
@Lập Trình Viên Số Khổ hình như ở chỗ này
Mã:
    for j in range(i-1, i - dp[i-1] - 1, -1):
        if nums[j] & nums[i] != 0:
            dp[i] = 1
            flag = 1
            break
gán dp=1 luôn là ko đúng vì như thế là bác bỏ hết mấy cái j trước đó rồi
E idea cũng giống bác nhưng viết thế này
Python:
class Solution:
    def longestNiceSubarray(self, nums: List[int]) -> int:
        dp=[1]*len(nums)
        res=1
        for i in range(1,len(nums)):
            for j in range(i-1,i-1-dp[i-1],-1):
                if nums[i]&nums[j]==0:
                    dp[i]+=1
                else:
                    break
            res=max(dp[i],res)
        return res
à nhầm :)), tks fen

mà cái này O(N2) sao vẫn pass nhỉ
  • 1 <= nums.length <= 105
 
Biweekly Contest 86
C3 https://leetcode.com/problems/maximum-rows-covered-by-columns/
bài này ai biết đề nó như nào ko, qua đọc mà ko hiểu đề nói gì lun
  • đầu tiên chọn k cột, 1 hàng đúng là 1 hàng có các ô có giá trị 1 bắt buộc phải thuộc k cột đó.
  • như vd1 thì chọn 2 cột 0, 2 thì có hàng 0,1,3 là đúng, còn hàng 2 không đc chọn vì có một ô có giá trị 1 thuộc cột 1 mà cột 1 (cột ko đc chọn)
  • hôm qua cx phải mất gần 10 phút để hiểu cái đề
 
Contest sáng nay C1 ez, C2 math, C3 làm kiểu straitforward cứ thêm số tiếp theo thì check với các số trong subarr trước đó.
C4 cảm giác chỉ cần dùng heap push pop mô phỏng lại thôi mà còn 45p cx ko xong đc :(
https://leetcode.com/contest/weekly-contest-309/problems/meeting-rooms-iii/
C4 giải kiểu trâu bò vẫn Accept: https://leetcode.com/submissions/detail/791109321/ Không có heap push pop gì hết, cứ loop hết các room thôi.
O(nk)

Ý tưởng:

  • Sort các meeting theo start time
  • Lưu hai mảng chứa thời gian finish của từng room, và số lần room đó được dùng
  • Với mỗi meeting thì tìm room r thỏa mãn:
    • r đầu tiên sao cho finish(r) <= start,
    • Nếu không tìm được thì tìm r đầu tiên sao cho finish(r) nhỏ nhất
  • Sử dụng room r, cập nhật lại mảng finish
 
  • đầu tiên chọn k cột, 1 hàng đúng là 1 hàng có các ô có giá trị 1 bắt buộc phải thuộc k cột đó.
  • như vd1 thì chọn 2 cột 0, 2 thì có hàng 0,1,3 là đúng, còn hàng 2 không đc chọn vì có một ô có giá trị 1 thuộc cột 1 mà cột 1 (cột ko đc chọn)
  • hôm qua cx phải mất gần 10 phút để hiểu cái đề
Bài này input bé tí chắc giải theo kiểu brute force thử tất cả các tổ hợp thôi nhỉ? Mình chưa nghĩ ra được cách nào hay hơn.
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
_Gia_Cat_Luong_,
Người trả lời cuối
Vipluckystar,
Trả lời
17.755
Lượt xem
1.212.963
Quay lại
Lên đầu trang