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 giải vô địch chạy lùi trong contest rồi
zFNuZTA.png
Contest này toy để quên não ở nhà nên toang rồi
zFNuZTA.gif
sắp xuống làm Vozliz :shame:

via theNEXTvoz for iPhone
 
vào nhầm thread à, sao leetcode daily mà toàn post bài contest thế này :after_boom:
Java:
class Solution {
    public ListNode[] splitListToParts(ListNode head, int k) {
        ListNode[] list = new ListNode[k];
        ListNode curr = head;
        int len = 0;
        while(curr!=null){
            len++;
            curr = curr.next;
        }
        curr = head;
        ListNode prev = curr;
        int n = len/k;
        int r = len%k;
        for(int i = 0;i<k;i++){
            int size = i<r? n+1:n;
            list[i] = curr;
            for(int j = 0; j<size;j++){
                prev = curr;
                curr = curr.next;
                if(j==size-1)
                    prev.next = null;                   
            }
        }
        return list;
    }
}
 
C++:
class Solution {
   public:
    vector<ListNode*> splitListToParts(ListNode* head, int k) {
        vector<ListNode*> res;
        ListNode* tmp = head;
        int n = 0;
        while (tmp) ++n, tmp = tmp->next;
        int div = n / k, mod = n % k;

        while (k) {
            tmp = head;
            for (int i = 1; i < div + (mod > 0); ++i) tmp = tmp->next;
            res.push_back(head);
            if (tmp) head = tmp->next, tmp->next = nullptr;
            --mod, --k;
        }

        return res;
    }
};
 
JavaScript:
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode[]}
 */
var splitListToParts = function(head, k) {
    const ans = [];
    let n = (() => {
        let t = head, len = 0;
        while (t) {
            len++;
            t = t.next;
        }
        return len;
    })();
    while (k > 0) {
        const t = new ListNode();
        let tt = t, sz = 0;
        for (; sz * k < n;) {
            tt.next = head;
            head = head.next;
            tt = tt.next;
            tt.next = null;
            sz++;
        }
        ans.push(t.next);
        k--;
        n -= sz;
    }
    return ans;
};
 
Java:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode[] splitListToParts(ListNode head, int k) {
        int len = 0;
        Queue<Integer> queue = new ArrayDeque<>();
        while (head != null) {
            len++;
            queue.offer(head.val);
            head = head.next;
        }
        int div = len / k;
        int mod = len % k;
        ListNode[] heads = new ListNode[k];
        if (len < k) {
            for (int i = 0; i < k; i++) {
                int el = div;
                ListNode root = new ListNode();
                ListNode temp = root;
                while (el >= 0 && !queue.isEmpty()) {
                    temp.next = new ListNode(queue.poll());
                    temp = temp.next;
                    el--;
                }
                heads[i] = root.next;
            }
            return heads;
        }
        for (int i = 0; i < k; i++) {
            int el = div;
            ListNode root = new ListNode();
            ListNode temp = root;
            while (el > 0 && !queue.isEmpty()) {
                temp.next = new ListNode(queue.poll());
                temp = temp.next;
                el--;
            }
            if (mod > 0) {
                temp.next = new ListNode(queue.poll());
                temp = temp.next;
                mod--;
            }
            heads[i] = root.next;
        }
        return heads;
    }
}
đang đi khắc phục hậu quả bão số 3 nên để tạm đây refactor code sau
bpUNvGy.png
 
C-like:
type Node = Box<ListNode>;
impl Solution {
    pub fn split_list_to_parts(mut head: Option<Node>, k: i32) -> Vec<Option<Node>> {
        let (mut n, k) = (0, k as usize);
        let mut result: Vec<Option<Node>> = vec![];
        let mut p = head.as_ref();

        while let Some(node) = p {
            p = node.next.as_ref();
            n += 1;
        }

        let (q, r) = (n / k, n % k);

        fn build_sublist(mut head: Option<Node>, length: usize) -> (Option<Node>, Option<Node>) {
            let mut sentinel = Some(Box::new(ListNode::new(0)));
            let mut tail = sentinel.as_mut();

            for j in 0..length {
                if let Some(mut node) = head {
                    head = node.next.take();
                    tail =
                        tail.map(|tail| {
                            tail.next = Some(node);
                            tail
                        });
                    tail = tail.and_then(|tail| tail.next.as_mut());
                }
            }

            let subhead = sentinel.and_then(|mut sen| sen.next.take());

            (head, subhead)
        }

        for i in 0..r {
            let (new_head, subhead) = build_sublist(head.take(), q + 1);
            head = new_head;

            result.push(subhead);
        }

        for i in r..k {
            let (new_head, subhead) = build_sublist(head.take(), q);
            head = new_head;

            result.push(subhead);
        }

        result
    }
}
 
C-like:
impl Solution {
    fn len(head: &Option<Box<ListNode>>) -> i32 {
        let (mut current, mut n) = (head, 0);
        while let Some(node) = current {
            n += 1;
            current = &node.next;
        }
        n
    }
    pub fn split_list_to_parts(head: Option<Box<ListNode>>, k: i32) -> Vec<Option<Box<ListNode>>> {
        let (n, mut current) = (Self::len(&head), head);
        let (q, r) = (n / k, n % k);
        let parts = &mut Vec::new();
        for i in 0..k {
            let mut head = current.take();
            let mut tail = &mut head;
            let part_len = if i < r { q + 1 } else { q };
            for _ in 0..(part_len - 1) {
                if tail.is_some() {
                    tail = &mut tail.as_mut().unwrap().next;    
                }
            }
            if tail.is_some() {
                current = tail.as_mut().unwrap().next.take();
            }
            parts.push(head);
        }
        parts.to_owned()
    }
}
 
Câu 3 dùng dfs + memoi lại, 10^5 thì phải On mới được accept, ko là tle hết, nhưng mà nch là vẫn khoai quá T_T câu 2 biết là dùng BS rồi mà đéo biết implement như nào, khó vãi đái.
Java:
class Solution {
    public int maxPossibleScore(int[] start, int d) {
        int n = start.length;
    
        //boundary: min = 0, max = start[max]+d - start[min];
        Arrays.sort(start);
    
        int l =0;
        int r = start[n-1]+d-start[0];
    
        while(l<r){
            int mid=(int)Math.ceil(l + (double)(r-l)/2);
            if(condition(start, d,mid)){
                l = mid;
            }
            else{
                r=mid-1;
            }
        }
        return r;
    }
    private boolean condition(int[] start, int d, int num){
    
        long last_chosen = start[0];
        for(int i =1 ;i < start.length;i++){
            long in_range = last_chosen + num;
            if(in_range <= start[i]) {
                last_chosen = start[i];
            }
            else if(in_range<=(long)start[i]+d){
                last_chosen = in_range;
            }
            else return false;
        }
        return true;
    }
}
thấy mấy thím bảo BS thì làm thử ôn BS chứ để lâu quá ko xài lụt nghề mất, maximize ngược với pattern minimize học mót nên cũng vấp cỏ 1 tí.
zcmUPkm.png
 
Sửa lần cuối:
Nay làm contest fail quá nên kh có tâm trạng clean lại code luôn...
Java:
class Solution {
    public ListNode[] splitListToParts(ListNode head, int k) {
        int n = 0;
        ListNode curr = head;
        while (curr != null) {
            n++;
            curr = curr.next;
        }

        ListNode[] res = new ListNode[k];
        int idx = 0, temp = k;
        curr = head;
        while (idx < k) {
            res[idx++] = curr;

            int count = (n - 1) / temp + 1;
            for (int i = 1; i < count; i++) {
                if (curr != null) {
                    curr = curr.next;
                }
            }
            if (curr != null) {
                ListNode next = curr.next;
                curr.next = null;
                curr = next;
            }
            n -= count;
            temp--;
        }
        return res;
    }
}
 
Java:
class Solution {
    public int maxPossibleScore(int[] start, int d) {
        int n = start.length;
   
        //boundary: min = 0, max = start[max]+d - start[min];
        Arrays.sort(start);
   
        int l =0;
        int r = start[n-1]+d-start[0];
   
        while(l<r){
            int mid=(int)Math.ceil(l + (double)(r-l)/2);
            if(condition(start, d,mid)){
                l = mid;
            }
            else{
                r=mid-1;
            }
        }
        return r;
    }
    private boolean condition(int[] start, int d, int num){
   
        long last_chosen = start[0];
        for(int i =1 ;i < start.length;i++){
            long in_range = last_chosen + num;
            if(in_range <= start[i]) {
                last_chosen = start[i];
            }
            else if(in_range<=(long)start[i]+d){
                last_chosen = in_range;
            }
            else return false;
        }
        return true;
    }
}
thấy mấy thím bảo BS thì làm thử ôn BS chứ để lâu quá ko xài lụt nghề mất, maximize ngược với pattern minimize học mót nên cũng vấp cỏ 1 tí.
zcmUPkm.png
Bài này na ná cái bài 2616 nhưng phức tạp hơn tý, đù lần đầu làm contest là đc đúng bài easy trầm cảm vl :(
 
e làm dc nhưng mà làm mất 1 tiếng, trong contest tâm lý hơn chắc buông sớm
PCDxCB0.png
Có cái pattern cho BS ấy, lội ngược lại mà kiếm. Chuyên trị các loại BS. T thì k dùng cái đó đó trước khi đọc đc cái đó thì t đã tự build đc pattern cho riêng mình rồi.
BS mà làm từ đầu k follow theo pattern nào là hay sai linh tinh, ăn nhiều bọ lắm
 
Đi làm mấy năm rồi nay mới bắt đầu sờ đến mấy câu graph. Sau khi xem giải thì thấy cũng dễ :giggle:
 
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.213.806
Quay lại
Lên đầu trang