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.
mấy bài về mono stack khó quá, toàn ko làm được =((
Khó quá thì cop sol đi bác
6l22n1x.png
 
Java:
class Solution {
    public int maxWidthRamp(int[] nums) {
        int n = nums.length;
        int[] rightMax = new int[n];
        int r =0, l = 0;
        int res = 0;
        rightMax[n-1] = nums[n-1];
        for(int i = n-2;i>=0;i--){
            rightMax[i] = Math.max(nums[i],rightMax[i+1]);
        }
        while(l<=r && r<n){
            if(nums[l]<=rightMax[r]){
                res = Math.max(r-l,res);
                r++;
            }
            else
                l++;
        }
        return res;
    }
}
 
CSS:
class Solution {
public:
    int maxWidthRamp(std::vector<int>& nums) {
        int m = *max_element(nums.begin(), nums.end());
        vector<int> pre(m + 1, 1e5);
        int n = nums.size();
        for (int i = 0; i < n; i++)
            pre[nums[i]] = min(pre[nums[i]], i);
        for (int i = 1; i <= m; i++)
            pre[i] = min(pre[i], pre[i - 1]);
        int res = 0;
        for (int i = 0; i < n; i++)
            res = max(res, i - pre[nums[i]]);
        return res;
    }
};
 
CSS:
class Solution {
public:
    int maxWidthRamp(std::vector<int>& nums) {
        int m = *max_element(nums.begin(), nums.end());
        vector<int> pre(m + 1, 1e5);
        int n = nums.size();
        for (int i = 0; i < n; i++)
            pre[nums[i]] = min(pre[nums[i]], i);
        for (int i = 1; i <= m; i++)
            pre[i] = min(pre[i], pre[i - 1]);
        int res = 0;
        for (int i = 0; i < n; i++)
            res = max(res, i - pre[nums[i]]);
        return res;
    }
};
làm mảng như trư này cho dễ hiểu, code 2 năm trước mà nhìn cái hiểu luôn
 
Python:
class Solution:
    def maxWidthRamp(self, nums: List[int]) -> int:
        stack_indexes = []
        for i, a in enumerate(nums):
            if not len(stack_indexes) or nums[i] < nums[stack_indexes[-1]]:
                stack_indexes.append(i)
        res = 0
        for i in range(len(nums)-1, -1, -1):
            while len(stack_indexes) and nums[stack_indexes[-1]] <= nums[i]:
                res = max(res, i - stack_indexes.pop())
        return res
 
anh em làm đc mấy bài mono stack cho xin tý kinh nghiệm với, chứ cái dạng này với em khoai quá, đọc ko biết apply mono stack kiểu gì luôn =((
mấy bài so sánh cặp phần tử, hay tìm min/max tại 1 phạm vi trong mảng, thì nó sẽ hay dùng monotonic stack
Fency làm mấy bài kiểu Next Greater Element, Trapping rain là hiểu. Làm 1 lần chưa hiểu thì làm nhiều lần, các bài cùng dạng luôn. Làm nhiều lần vẫn chưa hiểu thì chắc là DNA issue rồi, không cần phải cố nữa :rap:
 
mấy bài so sánh cặp phần tử, hay tìm min/max tại 1 phạm vi trong mảng, thì nó sẽ hay dùng monotonic stack
Fency làm mấy bài kiểu Next Greater Element, Trapping rain là hiểu. Làm 1 lần chưa hiểu thì làm nhiều lần, các bài cùng dạng luôn. Làm nhiều lần vẫn chưa hiểu thì chắc là DNA issue rồi, không cần phải cố nữa :rap:
tks bác, để em note lại cày :adore:
 
anh em làm đc mấy bài mono stack cho xin tý kinh nghiệm với, chứ cái dạng này với em khoai quá, đọc ko biết apply mono stack kiểu gì luôn =((
Làm cũng tương đối nên lúc đầu đọc đề thì em liên tưởng ngay đến bài tìm số gần nhất bên trái sao cho nhỏ hơn số hiện tại rồi, xong nháp thử là nếu dùng stack thì mình sẽ có thể làm được gì rồi cuối cùng hình thành nên đáp án thôi bác.
 
Làm cũng tương đối nên lúc đầu đọc đề thì em liên tưởng ngay đến bài tìm số gần nhất bên trái sao cho nhỏ hơn số hiện tại rồi, xong nháp thử là nếu dùng stack thì mình sẽ có thể làm được gì rồi cuối cùng hình thành nên đáp án thôi bác.
Cái mono stack này trước h em cũng chưa làm nhiều, nch tìm đọc qua thì cũng chẳng có trick tips gì, cố mà làm cho tay to ra thì dễ nhận ra hơn thôi :(
 
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.214.510
Quay lại
Lên đầu trang