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 này từng ra daily rồi, mà lúc đó trư chưa làm được, may là trư để dành để phục thù chứ ko cop
uq1dgnk.png

Ủa nhưng sao ngày nào cũng có hard vậy @freedom.9
osCpCsi.png
Mà sao topic khác hôm qua vậy
Xv0BtTR.png
Đổi gió
osCpCsi.gif


via theNEXTvoz for iPhone
 
Swift:
class Solution {
    func longestSubarray(_ nums: [Int]) -> Int {
        var maxNum = 0
        var maxLen = 0
        var curLen = 0
        for num in nums {
            if num > maxNum {
                maxNum = num
                curLen = 1
                maxLen = 1
            } else if num == maxNum {
                curLen += 1
                maxLen = max(maxLen, curLen)
            } else {
                curLen = 0
            }
        }
        return maxLen
    }
}
 
Phế vật quá, bài này cũng để dính bọ :too_sad:
Java:
class Solution {
    public int longestSubarray(int[] nums) {
        int res = 0;
        int max = 0;
        int pre = 0;
        int count = 0;
        for(int num:nums){
            if(num!=pre)
                count = 1;
            else
                count++;
            pre = num;
            if(num>max){
                res = 1;
                max = num;
            }
            if(num==max)
                res = Math.max(res,count);           
        }
        return res;
    }
}
 
Python:
class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        maxSofar = -inf
        count = 0
        ans = 0
        for num in nums:
            if num > maxSofar:
                ans = 1
                maxSofar = num
                count = 1
            elif num == maxSofar:
                count += 1
                ans = max(ans, count)
            else:
                count = 0
        return ans
Mấy bài nay dễ quá, hôm nay tôi sẽ giới thiệu cho anh em 1 thuật toán là sweep line.
Bài toán là, có 1 cái nhà hàng và list của people, với mỗi ith people thì [start, end] là thời điểm mà người này vào nhà hàng hoặc rời nhà hàng, tính xem có tối đa bao nhiêu người ở trong 1 nhà hàng ở 1 đơn vị thời gian.
Làm xong 2 bài cơm thêm này sẽ học được thuật toán sweep line, thêm kiến thức mới vào đầu phá đảo interview :doubt:
cái bài này y chang kiểu bài cộng interval bữa fen nào đăng đề hackerrank + lời giải nên biết giải luôn r.
SPFTNk5.png
chỉ cần + 1 vào start với -1 vào end của interval r prefixsum cái array
Y9XGQJi.png

Java:
class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        int last =0;
        for(int[] trip:trips ){
            last=Math.max(trip[2], last);
        }
        int[] time = new int[last+1];
        for(int[] trip:trips ){
            int passengers= trip[0];
            int from = trip[1];
            int to = trip[2];
            time[from]+=passengers;
            time[to]-=passengers;
        }
        for(int i =0;i<=last;i++){
            time[i]+=i==0?0:time[i-1];
            if(time[i]>capacity) return false;
        }
        return true;
    }
}
câu hard interval to quá MLE r kiếm cách khác thôi
CalOUUj.gif
 
Sửa lần cuối:

Em là dân trái ngành đang muốn luyện leetcode 1 cách có hệ thống và bài bản nhất ạ. Em trước thì chỉ học chay như :stack, heap, bfs, dfs, dynamic rồi cứ đụng bài nào làm bài đó nên kiểu đôi khi có câu làm được câu không và thấy cảm giác kiến thức của mình không có cứng. Mấy bác luyện nhiều có lộ trình cụ thể nào chỉ bảo em với ạ .Xem tệp đính kèm 2682502
@MasonMaoSuVuong có dạy algorithms trên udemy ấy, bạn hộp thím ấy gửi coupon cho
 
Mã:
class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        n = len(nums)
        max_value = max(nums)
        cnt = 0
        res = 0
        for i in range(n):
            if max_value == nums[i]:
                cnt += 1
            else:
                res = max(res , cnt)
                cnt = 0
        res = max(res , cnt)
       
        return res
k thich bitmask
kEEZvq6.png
Bài này còn chưa dùng tới tí bit nào nữa :beat_brick: topic cơm tuần sau là bit manipulation nhé.
 
C-like:
impl Solution {
    pub fn longest_subarray(nums: Vec<i32>) -> i32 {
        let (len, _, _) = nums.iter().fold(
            (0, 0, 0),
            |(last_max_len, current_max_len, current_max_value), &num| match num {
                v if v > current_max_value => (1, 1, v),
                v if v < current_max_value => (last_max_len, 0, current_max_value),
                _ => (core::cmp::max(last_max_len, current_max_len + 1), current_max_len + 1, current_max_value)
            },
        );
        len
    }
}
 
C#:
public class Solution {
    public int LongestSubarray(int[] nums) {
        int max = 0;
        int count = 0;
        int result = 0;
        for(int i = 0; i<nums.Length; i++)
        {
            if(nums[i] > max)
            {
                max = nums[i];
                count = 1;
                result = 1;
            }
            else if(nums[i] == max)
                count++;
            else if(nums[i] != max)
            {
                count = 0;
            }
            result = Math.Max(result, count);
        }
        return result;
    }
}
 
C-like:
impl Solution {
    pub fn longest_subarray(nums: Vec<i32>) -> i32 {
        let max =
            nums.iter().copied().
                fold(i32::MIN, |acc, num| acc.max(num));

        let (mut left, mut right) = (usize::MAX, usize::MAX);
        let (mut found, mut result) = (false, 0);

        for (i, num) in nums.iter().copied().enumerate() {
            match (num == max, found) {
                (true, false) => (left, right, found) = (i, i, true),
                (true, true) => right += 1,
                (false, _) => (left, right, found) = (usize::MAX, usize::MAX, false)
            }

            if left != usize::MAX {
                result = result.max(right - left + 1);
            }
        }

        result as i32
    }
}
 
bài hôm nay khó quá em không biết làm =((

Python:
class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        # [hint 1]: Notice that the bitwise AND of two different numbers will always be strictly less than the maximum of those two numbers.
        
        max_num = 0
        for num in nums:
            if num > max_num:
                max_num = num
        
        best = streak = 0
        
        for num in nums:
            if num == max_num:
                streak += 1
                if streak > best:
                    best = streak
            else:
                streak = 0

        return best
 
contest có debugger ko các thím nhỉ? bth mình hay code trên ide để debug mới cọp code lên web
xCO9chd.png
 
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.659
Quay lại
Lên đầu trang