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

  • Người tạo chủ đề Người tạo chủ đề unknowpc90
  • Ngày bắt đầu Ngày bắt đầu
1 bài merge list khá hay, ae tham khảo
https://leetcode.com/problems/merge-k-sorted-lists/

Bài này dùng Min Heap để tối ưu

C++:
    struct Comperator
    {
        bool operator()(ListNode* a, ListNode* b)
        {   
            return a->val > b->val;
        }
    };
    
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode* head = nullptr;
        ListNode* cur = nullptr;
        
        std::priority_queue<ListNode*, std::vector<ListNode*>, Comperator> minHeap;
        
        for(auto& iter : lists)
        {
            if(!iter)
                continue;
            
            minHeap.push(iter);
        }
        
        while(!minHeap.empty())
        {
            ListNode* node = minHeap.top();
            minHeap.pop();
            
            if(node && node->next)
            {
                minHeap.push(node->next);   
            }   

            if(!head)
            {
                head = node;
            }
            else if(cur)
            {
                cur->next = node;           
            }
            
            cur = node;
            
            if(!node)
                break;
        }

        return head;
    }
 
Nay ở nhà 1 mình húp mỳ đói mờ cả mắt. Ngồi từ 2 rưỡi sáng đến giờ mới implement hết 3 cái thuật string search: Boyer-Moore, KMP, Rabin-Karp, với được 1 bài hard trên leetcode (không biết làm, lúc đầu làm brute force chỉ pass 119/120 case, nhưng thấy họ ghi là xài KMP nên mới lọ mọ tìm cái để đọc đọc). Đọc hết VNOI, mấy web linh tinh các kiểu cũng không hiểu cái KMP. Xem 2 vid của anh Ấn Độ mất 30ph là thông não. Làm xong trời cũng sáng chạy vội sang quán húp bát cháo rồi về ngủ.
g8XXj8u.gif

https://leetcode.com/problems/shortest-palindrome/
C++:
class Solution {
public:
    string shortestPalindrome(string s) {
        string New="";
        New+=s;
        New+='.';
        reverse(s.begin(),s.end());
        New+=s;
        int length=0;
        vector<int>LPS(New.size(),0);
        for(int i=1;i<New.size();i++){
            while(length>0&&New[length]!=New[i]) length=LPS[length-1];
            if(New[length]==New[i]){
                LPS[i]=++length;
            }
            else LPS[i]=0;
        }
        string res="";
        res+=s.substr(0,s.size()-LPS[New.size()-1]);
        reverse(s.begin(),s.end());
        res+=s;
        return res;
    }
};
 
Nay ở nhà 1 mình húp mỳ đói mờ cả mắt. Ngồi từ 2 rưỡi sáng đến giờ mới implement hết 3 cái thuật string search: Boyer-Moore, KMP, Rabin-Karp, với được 1 bài hard trên leetcode (không biết làm, lúc đầu làm brute force chỉ pass 119/120 case, nhưng thấy họ ghi là xài KMP nên mới lọ mọ tìm cái để đọc đọc). Đọc hết VNOI, mấy web linh tinh các kiểu cũng không hiểu cái KMP. Xem 2 vid của anh Ấn Độ mất 30ph là thông não. Làm xong trời cũng sáng chạy vội sang quán húp bát cháo rồi về ngủ.
g8XXj8u.gif

https://leetcode.com/problems/shortest-palindrome/
C++:
class Solution {
public:
    string shortestPalindrome(string s) {
        string New="";
        New+=s;
        New+='.';
        reverse(s.begin(),s.end());
        New+=s;
        int length=0;
        vector<int>LPS(New.size(),0);
        for(int i=1;i<New.size();i++){
            while(length>0&&New[length]!=New[i]) length=LPS[length-1];
            if(New[length]==New[i]){
                LPS[i]=++length;
            }
            else LPS[i]=0;
        }
        string res="";
        res+=s.substr(0,s.size()-LPS[New.size()-1]);
        reverse(s.begin(),s.end());
        res+=s;
        return res;
    }
};

Accepted solution, vét cạn thôi, ko phải tối ưu nhưng gọn :doubt:

Python:
class Solution:
    def shortestPalindrome(self, s: str) -> str:
        shortest_ps = s
        i = 1

        while True:
            half_length_ps = len(shortest_ps) // 2
            if half_length_ps == 0 or shortest_ps[0:half_length_ps] == shortest_ps[-half_length_ps:][::-1]:
                break
            shortest_ps = s[-i:][::-1] + s
            i += 1

        return shortest_ps
 
Mọi người cho em hỏi là thầy em có dạy về thuật toán và đây là sắp xếp nổi bọt nhưng em nhìn thì nếu quay ngang ra nó chả khác gì cái Selection Sort cả. không biết có phải em lú không ạ
Screenshot 2021-12-21 124308.png
 
Mọi người cho em hỏi là thầy em có dạy về thuật toán và đây là sắp xếp nổi bọt nhưng em nhìn thì nếu quay ngang ra nó chả khác gì cái Selection Sort cả. không biết có phải em lú không ạ Xem tệp đính kèm 934285

Này là selection sort rồi, mỗi step chọn ra giá trị min rồi swap về phía đầu mảng. Còn bubble sort đi đến đâu nó swap đến đấy.

Sent from Samsung SM-G973F using vozFApp
 
Này là selection sort rồi, mỗi step chọn ra giá trị min rồi swap về phía đầu mảng. Còn bubble sort đi đến đâu nó swap đến đấy.

Sent from Samsung SM-G973F using vozFApp
Vậy là sai rồi đúng không ạ, vừa nãy em định hỏi lại thầy mà không biết giải thích bằng lời sao nữa
 
Mình có 1 cái problem như hình, có runtime constraint nên không thể brute force được, các ae vào giúp đỡ. Mình cám ơn
1640339657874.png

Các ae lưu ý là 2 là winter chứ k phải summer
 

Thống kê chủ đề

Ngày tạo
unknowpc90,
Người trả lời cuối
Spaghetti Code,
Trả lời
1.460
Lượt xem
154.040
Quay lại
Lên đầu trang