thảo luận [Học Tập] Topic thuật toán

Liệu có thể làm thế này k fen. LIS theo chiều thứ nhất trước, ra 1 mảng LIS con. Sau đó làm LIS theo chiều thứ 2 trên mảng con này => Ra kết quả.
Thế thì phải tìm ra tất cả các LIS trên chiều thứ nhất. Sau đó với mỗi LIS trên chiều thứ nhất tìm LIS trên chiều thứ 2. Độ phức tạp là O(nlogn * (số LIS trên chiều thứ nhất))

Mà gặp worse case: dãy giảm trên chiều thứ nhất thì số LIS trên chiều thứ nhất = n
 
Liệu có thể làm thế này k fen. LIS theo chiều thứ nhất trước, ra 1 mảng LIS con. Sau đó làm LIS theo chiều thứ 2 trên mảng con này => Ra kết quả.
không thím. lis 1 chiều, không đảm bảo các phần tử trong dãy này nằm trong lis kết quả.

ví dụ
1000 1
1001 1
1002 1
1003 1
1004 1
1 2
3 4
5 6
ở chiều đầu tiên lis là 1000, 1001, 1002, 1003, 1004, ko liên quan gì tới kết quả.

nếu muốn làm vậy thì phải xét tất cả dãy tăng trong 1 chiều -> ko hiệu quả.
 
không thím. lis 1 chiều, không đảm bảo các phần tử trong dãy này nằm trong lis kết quả.

ví dụ

ở chiều đầu tiên lis là 1000, 1001, 1002, 1003, 1004, ko liên quan gì tới kết quả.

nếu muốn làm vậy thì phải xét tất cả dãy tăng trong 1 chiều -> ko hiệu quả.
Ra vậy, đã hiểu, thank thím nha.
 
Thế thì phải tìm ra tất cả các LIS trên chiều thứ nhất. Sau đó với mỗi LIS trên chiều thứ nhất tìm LIS trên chiều thứ 2. Độ phức tạp là O(nlogn * (số LIS trên chiều thứ nhất))

Mà gặp worse case: dãy giảm trên chiều thứ nhất thì số LIS trên chiều thứ nhất = n
Nhiều lúc k biết fen giỏi vl hay mới học code luôn :v
 
Tiếp tục chuyên mục mỗi ngày một leetcode. Các bài mình làm ngày hôm nay:

#436. (Medium) https://leetcode.com/problems/find-right-interval/
#437. (Medium) https://leetcode.com/problems/path-sum-iii/
#438. (Medium) https://leetcode.com/problems/find-all-anagrams-in-a-string/

Hôm nay k có tgian nên mình k share chi tiết bài nào, share chút code (chưa tối ưu mấy) của bài Path Sum III vậy:
#435. (Medium) https://leetcode.com/problems/path-sum-iii

Python:
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:
        if not root:
            return 0
       
        s = [root]
        count = 0
        while s:
            node = s.pop()
            count += self.pathSumRecur(node, targetSum)
            if node.left:
                s.append(node.left)
            if node.right:
                s.append(node.right)
               
        return count
   

    def pathSumRecur(self, root: Optional[TreeNode], targetSum: int):
        if not root:
            return 0
       
        return int(root.val == targetSum) + self.pathSumRecur(root.left, targetSum - root.val) + self.pathSumRecur(root.right, targetSum - root.val)
 
Last edited:
Thấy fen code cũng ok rồi mà làm gì tới nỗi k có việc nhỉ. Chắc chưa đi apply thôi chứ.
Bác đừng tin lời ổng. Ổng xạo lon đó. CTO của 1 cty tầm cỡ nào đó chứ chả đùa. Hằng ngày áp lực công việc nên lên voz lập acc clone vào troll anh em đó. Lạ gì nữa
 
Thím nắm thông tin của thím kia ở đâu vậy? Cho em nghe ké với :byebye::byebye:
Nắm gì đâu bác. Cứ lâu lâu bác để ý là thấy liền à. NHiều khi ông đó sẽ xuất thần và nói những thứ cực kì cao siêu, chỉ có những người có trình độ cao mới hiểu ổng nói cái gì thôi, và sau khi xuất thần xong thì ổng lại nói mấy cái vớ vấn tới mức đần độn vcl, chỉ muốn chửi vào mặt.
Nên chỉ có thể là giả ngu giả khờ thôi.
 
Nắm gì đâu bác. Cứ lâu lâu bác để ý là thấy liền à. NHiều khi ông đó sẽ xuất thần và nói những thứ cực kì cao siêu, chỉ có những người có trình độ cao mới hiểu ổng nói cái gì thôi, và sau khi xuất thần xong thì ổng lại nói mấy cái vớ vấn tới mức đần độn vcl, chỉ muốn chửi vào mặt.
Nên chỉ có thể là giả ngu giả khờ thôi.
Tôi công nhận thấy lập post về nhiều lĩnh vực lắm: Web, App, IoT, AI/ML, Algo... trình bao quát vậy thì chắc ko phải dev quèn đâu, chắc cỡ shark Hưng trở lên. Hoặc 1 ngày @chunxong đổi Avatar ông già cả voz té ngửa
OG0lsXv.png
 
Last edited:
Nắm gì đâu bác. Cứ lâu lâu bác để ý là thấy liền à. NHiều khi ông đó sẽ xuất thần và nói những thứ cực kì cao siêu, chỉ có những người có trình độ cao mới hiểu ổng nói cái gì thôi, và sau khi xuất thần xong thì ổng lại nói mấy cái vớ vấn tới mức đần độn vcl, chỉ muốn chửi vào mặt.
Nên chỉ có thể là giả ngu giả khờ thôi.
Chuẩn luôn. Nhiều lúc thím ấy phát biểu đỉnh vkl, chắc chắn là đại trí giả ngu, đại dũng nhược khiếp.
 
Nắm gì đâu bác. Cứ lâu lâu bác để ý là thấy liền à. NHiều khi ông đó sẽ xuất thần và nói những thứ cực kì cao siêu, chỉ có những người có trình độ cao mới hiểu ổng nói cái gì thôi, và sau khi xuất thần xong thì ổng lại nói mấy cái vớ vấn tới mức đần độn vcl, chỉ muốn chửi vào mặt.
Nên chỉ có thể là giả ngu giả khờ thôi.
Mày như đi guốc trong bụng thằng Linh Vật ấy nhỉ.
Trước tao thấy nó lảm nhảm spam mấy câu đần độn trên này với F17 mãi tao định mời nó cốc Starbucks.
Nhưng giờ ngẫm lại hôm đó nó nhận lời lại thấy 1 xe Porsche dựng trước mặt thì quê mặt bỏ mẹ tao :ah:
 
Last edited:
Có ai giúp em bài này được không ạ, bài này tiểu học nhưng em mãi không AC được:
https://ucode.vn/contests/tin-hoc-t...10&score=desc&quiz_id=16562&submission=355663
Đây là code của em
C++:
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    int a, n;
    n = s.length();
    a = s[0] - '0';
    for (int i = 0; i<n-1; i++)
    {
        if (s[i]>s[i+1])
        {
            a = a-1;
            break;
        }
    }
    cout << a + (n-1)*9;
}
Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int n=s.length();
    int a=s[0]-'0';
    int cnt=0;
    for(int i=0;i<n-1;i++){
        if(s[i]-'0'<s[i+1]-'0') break;
        if(s[i]-'0'>s[i+1]-'0'){
            a--;
            break;
        }
    }
    cout<<(n-1)*9+a;
}


s[i+1] dạng char -'0' để đưa về dạng int, cơ mà thế vẫn chưa đủ, thử test case 2800 vẫn sai, thêm 1 cái if nữa mới đúng
 
Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int n=s.length();
    int a=s[0]-'0';
    int cnt=0;
    for(int i=0;i<n-1;i++){
        if(s[i]-'0'<s[i+1]-'0') break;
        if(s[i]-'0'>s[i+1]-'0'){
            a--;
            break;
        }
    }
    cout<<(n-1)*9+a;
}


s[i+1] dạng char -'0' để đưa về dạng int, cơ mà thế vẫn chưa đủ, thử test case 2800 vẫn sai, thêm 1 cái if nữa mới đúng
Thank bác! Mà cái biến cnt dùng để làm gì vậy?
 
Back
Top