thảo luận Leetcode mỗi ngày

  • Người tạo chủ đề Người tạo chủ đề Vipluckystar
  • Ngày bắt đầu Ngày bắt đầu
Jack vàng vip thế thiếu gia, trư mổ có mỗi jack thường + python thủ trong chuồng chó map Đền Cổ
kS0RIYB.png

Nhớ hồi ra RPK svip Truy Kid phát free 3 ngày cho toàn server làm ae Zombie khổ vcl, toàn một lủ đứng thủ cầm súng vip sấy sml Zombie
kS0RIYB.png
Jack thường bác ơi
 
hoài niệm quá,em làm bài này hồi cấp 2, cũng 8, 9 năm rồi :too_sad:
C#:
public class Solution {
    public IList<IList<int>> Generate(int numRows) {
        var result = new List<IList<int>>();
        for (int i = 0; i < numRows; i++)
        {
            var temp = new List<int>();
            for (int j = 0; j <= i; j++)
            {
                if (j == 0 || j == i)
                {
                    temp.Add(1);
                }
                else
                {
                    temp.Add(result[i-1][j] + result[i-1][j-1]);
                }
            }
            result.Add(temp);
        }
        return result;
    }
}

Giờ vẫn còn xài C# kiếm ăn mà ngán lắm rồi, cứ dính vô tụi C# .Net là suốt ngày windows, IIS, Azure, Azure Devops, MS SQL. Ngán tận cổ vì cái đống này, đủ thứ vấn đề và cảm giác đi sau thế giới công nghệ phải vài năm.
Đm có hôm ngồi mất ngủ cả tuần liền vì cứ chạy cái app lên con VM chạy windows server là có 1 cái process cứt đái của nó trigger ăn hết cả CPU đ hiểu lí do tại sao, tức điên với hàng Microsoft =(( vài năm nữa chắc bỏ hẳn qua chơi Java.
Giờ mấy cty nó xài .Net là nó ăn vô máu phải dùng cái combo bên trên rồi thì làm sao kêu tụi nó chuyển qua Linux này nọ đc.
Chưa kể đống hầm bà lằng .Net framework cũ kỹ nó éo upgrade lên .Net mới nhất thì chạy kiểu gì.
Mấy năm trước chuyển về functional programming như Ruby, Python, xài Linux, Aws, Github này nọ lại đâm nghiện
zFNuZTA.gif

Dòng đời xô đẩy phải quay lại thằng C# kiếm cơm đúng cay cú. Kiểu như phải yêu lại người yêu cũ ấy
g8XXj8u.gif

Mà mình cũng ko biết dùng python ngoài việc học mấy cái cơ bản để giải Leetcode, lỡ có đi interview có vòng Low level design chưa chắc code đc Python :sweat: chắc phải bổ túc thêm ít skill Python backup

via theNEXTvoz for iPhone
hix C# code gọn, đẹp mà nhiều abstraction với syntax sugar quá, team không có convention là code loạn xạ cả lên, nhảy việc thì sợ dính WPF, Winform, .NET Framework
nRlF7V2.gif
 
Bài ez mà code bẩn mắt quá :ah:
Java:
class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> default1 = new ArrayList<>();
        default1.add(1);
        result.add(default1);
        if(numRows == 1) return result;

        List<Integer> default2 = new ArrayList<>();
        default2.add(1);
        default2.add(1);
        result.add(default2);
        if(numRows == 2) return result;

        for(int i = 2; i < numRows; i++){
            List<Integer> temp = new ArrayList<>();
            temp.add(1);
            List<Integer> pre = result.get(i - 1);
            for(int j = 0; j < pre.size() - 1;j++){
                temp.add(pre.get(j) + pre.get(j + 1));
            }
            temp.add(1);
            result.add(temp);
        }

        return result;
    }
}
 
hoài niệm quá,em làm bài này hồi cấp 2, cũng 8, 9 năm rồi :too_sad:
C#:
public class Solution {
    public IList<IList<int>> Generate(int numRows) {
        var result = new List<IList<int>>();
        for (int i = 0; i < numRows; i++)
        {
            var temp = new List<int>();
            for (int j = 0; j <= i; j++)
            {
                if (j == 0 || j == i)
                {
                    temp.Add(1);
                }
                else
                {
                    temp.Add(result[i-1][j] + result[i-1][j-1]);
                }
            }
            result.Add(temp);
        }
        return result;
    }
}



hix C# code gọn, đẹp mà nhiều abstraction với syntax sugar quá, team không có convention là code loạn xạ cả lên, nhảy việc thì sợ dính WPF, Winform, .NET Framework
nRlF7V2.gif
Fen giờ đang làm quận nào thế
 
hoài niệm quá,em làm bài này hồi cấp 2, cũng 8, 9 năm rồi :too_sad:
C#:
public class Solution {
    public IList<IList<int>> Generate(int numRows) {
        var result = new List<IList<int>>();
        for (int i = 0; i < numRows; i++)
        {
            var temp = new List<int>();
            for (int j = 0; j <= i; j++)
            {
                if (j == 0 || j == i)
                {
                    temp.Add(1);
                }
                else
                {
                    temp.Add(result[i-1][j] + result[i-1][j-1]);
                }
            }
            result.Add(temp);
        }
        return result;
    }
}



hix C# code gọn, đẹp mà nhiều abstraction với syntax sugar quá, team không có convention là code loạn xạ cả lên, nhảy việc thì sợ dính WPF, Winform, .NET Framework
nRlF7V2.gif
ngôn ngữ với framework ko có backward compability tôi ko thể coi nó là 1 ngôn ngữ đẹp
osCpCsi.png
 
LC 118
Java:
class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rs = new ArrayList(); //if (numRows <= 0) return rs;
        for (int i = 1; i <= numRows; ++i) {
            var row = new ArrayList();
            for (int j = 0; j < i; ++j) {
                row.add(j == 0 || j == i - 1 ? 1 : rs.get(i - 2).get(j) + rs.get(i - 2).get(j - 1));
            }
            rs.add(row);
        }
        return rs;
    }
}
 
Mịa cái đề trap vl.
sai lầm mỗi đoạn
res += Math.min(2 * min, Math.min(min1, min2));


Ban đầu cứ nghĩ lấy 2 cái min i, j rồi swap sẽ ra kết quả tốt nhất.
Đọc sol mới biết là nếu lấy cái nhỏ nhất ra, đem swap với i, xong swap lại với j thì dù mất công swap 2 lần vẫn cho cost nhỏ hơn.
Tiên sư cái đề.

Java:
class Solution {
    public long minCost(int[] basket1, int[] basket2) {
        return useMap(basket1, basket2);
    }

    private void reduceAndRemoveIfZero(TreeMap<Integer, Integer> basketMap, Integer key, Integer val) {
        var crr = basketMap.get(key);
        if (crr == null)
            return;
        crr -= val;
        if (crr <= 0) {
            basketMap.remove(key);
        } else {
            basketMap.put(key, crr);
        }
    }

    private long useMap(int[] basket1, int[] basket2) {
        TreeMap<Integer, Integer> basket1Map = new TreeMap<>();
        TreeMap<Integer, Integer> basket2Map = new TreeMap<>();
        Arrays.sort(basket1);
        Arrays.sort(basket2);
        long min = 0L + Math.min(basket1[0], basket2[0]);

        int n = basket1.length;
        if (n != basket2.length)
            return -1;
        for (int i = 0; i < n; i++) {
            basket1Map.compute(basket1[i], (k, v) -> v == null ? 1 : v + 1);
        }
        for (int i = 0; i < n; i++) {
            if (basket1Map.containsKey(basket2[i]) && basket1Map.get(basket2[i]) > 0) {
                var crr = basket1Map.get(basket2[i]);
                if (crr == 1) {
                    basket1Map.remove(basket2[i]);
                } else {
                    basket1Map.put(basket2[i], crr - 1);
                }
            } else {
                basket2Map.compute(basket2[i], (k, v) -> v == null ? 1 : v + 1);
            }
        }
        long res = 0L;
        while (!basket1Map.isEmpty() && !basket2Map.isEmpty()) {
            int min1 = basket1Map.firstKey();
            int min2 = basket2Map.firstKey();
            res += Math.min(2 * min, Math.min(min1, min2));
            if ((basket1Map.get(min1) % 2 == 1) || (basket2Map.get(min2) % 2 == 1))
                return -1;
            if (min1 < min2) {
                int max2 = basket2Map.lastKey();
                reduceAndRemoveIfZero(basket1Map, min1, 2);
                reduceAndRemoveIfZero(basket2Map, max2, 2);
            } else {
                int max1 = basket1Map.lastKey();
                reduceAndRemoveIfZero(basket1Map, max1, 2);
                reduceAndRemoveIfZero(basket2Map, min2, 2);
            }
        }
        return (basket1Map.isEmpty() && basket2Map.isEmpty()) ? res : -1;
    }
}
 
Sửa lần cuối:
Mịa cái đề trap vl.
sai lầm mỗi đoạn
res += Math.min(2 * min, Math.min(min1, min2));


Java:
class Solution {
    public long minCost(int[] basket1, int[] basket2) {
        return useMap(basket1, basket2);
    }

    private void reduceAndRemoveIfZero(TreeMap<Integer, Integer> basketMap, Integer key, Integer val) {
        var crr = basketMap.get(key);
        if (crr == null)
            return;
        crr -= val;
        if (crr <= 0) {
            basketMap.remove(key);
        } else {
            basketMap.put(key, crr);
        }
    }

    private long useMap(int[] basket1, int[] basket2) {
        TreeMap<Integer, Integer> basket1Map = new TreeMap<>();
        TreeMap<Integer, Integer> basket2Map = new TreeMap<>();
        Arrays.sort(basket1);
        Arrays.sort(basket2);
        long min = 0L + Math.min(basket1[0], basket2[0]);

        int n = basket1.length;
        if (n != basket2.length)
            return -1;
        for (int i = 0; i < n; i++) {
            basket1Map.compute(basket1[i], (k, v) -> v == null ? 1 : v + 1);
        }
        for (int i = 0; i < n; i++) {
            if (basket1Map.containsKey(basket2[i]) && basket1Map.get(basket2[i]) > 0) {
                var crr = basket1Map.get(basket2[i]);
                if (crr == 1) {
                    basket1Map.remove(basket2[i]);
                } else {
                    basket1Map.put(basket2[i], crr - 1);
                }
            } else {
                basket2Map.compute(basket2[i], (k, v) -> v == null ? 1 : v + 1);
            }
        }
        long res = 0L;
        while (!basket1Map.isEmpty() && !basket2Map.isEmpty()) {
            int min1 = basket1Map.firstKey();
            int min2 = basket2Map.firstKey();
            res += Math.min(2 * min, Math.min(min1, min2));
            if ((basket1Map.get(min1) % 2 == 1) || (basket2Map.get(min2) % 2 == 1))
                return -1;
            if (min1 < min2) {
                int max2 = basket2Map.lastKey();
                reduceAndRemoveIfZero(basket1Map, min1, 2);
                reduceAndRemoveIfZero(basket2Map, max2, 2);
            } else {
                int max1 = basket1Map.lastKey();
                reduceAndRemoveIfZero(basket1Map, max1, 2);
                reduceAndRemoveIfZero(basket2Map, min2, 2);
            }
        }
        return (basket1Map.isEmpty() && basket2Map.isEmpty()) ? res : -1;
    }
}
UKiCiKh.png
bác lày chém bài hard trong 9 phút
 
C-like:
func minCost(b1 []int, b2 []int) int64 {
    n := len(b1)

    freq1 := make(map[int]int)
    freq2 := make(map[int]int)
    freq := make(map[int]int)

    for i := 0; i < n; i++ {
        freq1[b1[i]]++
        freq2[b2[i]]++
        freq[b1[i]]++
        freq[b2[i]]++
    }

    for k := range freq {
        if freq[k]%2 != 0 {
            return -1
        }
    }

    var a []int
    var b []int

    for k := range freq {
        diff := freq1[k] - freq2[k]
        if diff > 0 {
            for i := 0; i < diff/2; i++ {
                a = append(a, k)
            }
        } else if diff < 0 {
            for i := 0; i < -diff/2; i++ {
                b = append(b, k)
            }
        }
    }

    if len(a) != len(b) {
        return -1
    }

    slices.Sort(a)             
    slices.SortFunc(b, func(i, j int)int  { return j-i })

    minVal := slices.Min(b1)
    if mv := slices.Min(b2); mv < minVal {
        minVal = mv
    }

    res:=0
    for i := 0; i < len(a); i++ {
        res += min(a[i],b[i], 2*minVal)
    }

    return int64(res)
}
 
Bài cũng ko trap mấy, đm đang làm có cái loa thông báo emergency phải bỏ chạy giữa đêm :sweat: :sweat: cứ tưởng cháy mà chắc là có thằng nào bắn súng cmnr.
Có 2 case, 1 là direct swap. 2 là indirect qua thằng min, greedy thôi
Python:
class Solution:
    def minCost(self, basket1: List[int], basket2: List[int]) -> int:
        mn = min(min(basket1), min(basket2))
        n = len(basket1)
        freq = defaultdict(int)
        for i in range(n):
            freq[basket1[i]] += 1
            freq[basket2[i]] -= 1
        
        total = []
        for key, val in freq.items():
            if val % 2:
                return -1
            total += [key]*abs(val//2)

        total = sorted(total)
        cost = 0
        for i in range(len(total)//2):
            cost += min(2*mn, total[i])

        return cost
via theNEXTvoz for iPhone
 
Sửa lần cuối:
Bài cũng ko trap mấy, đm đang làm có cái loa thông báo emergency phải bỏ chạy giữa đêm :sweat: :sweat: cứ tưởng cháy mà chắc là có thằng nào bắn súng cmnr.
Có 2 case, 1 là direct swap. 2 là indirect qua thằng min, greedy thôi
Python:
class Solution:
    def minCost(self, basket1: List[int], basket2: List[int]) -> int:
        mn = min(min(basket1), min(basket2))
        n = len(basket1)
        freq = defaultdict(int)
        for i in range(n):
            freq[basket1[i]] += 1
            freq[basket2[i]] -= 1
       
        total = []
        for key, val in freq.items():
            if val % 2:
                return -1
            total += [key]*abs(val//2)

        total = sorted(total)
        cost = 0
        for i in range(len(total)//2):
            cost += min(2*mn, total[i])

        return cost
via theNEXTvoz for iPhone
vl ở bển sợ z bác :cry:
 
Python:
class Solution:
    def minCost(self, basket1: List[int], basket2: List[int]) -> int:
        freq = defaultdict(int)
        min_fruit = min(min(basket1), min(basket2))
        n = len(basket1)
        for i in range(n):
            freq[basket1[i]] += 1
            freq[basket2[i]] -= 1
        
        temp = []
        for fruit in freq:
            if freq[fruit] % 2 != 0:
                return -1
            temp.extend([fruit] * (abs(freq[fruit]) // 2))
        
        temp.sort()
        return sum(min(2 * min_fruit, x) for x in temp[: len(temp) // 2])
 

Thống kê chủ đề

Ngày tạo
Vipluckystar,
Người trả lời cuối
anoldvozer1710.v2,
Trả lời
7.738
Lượt xem
455.225
Quay lại
Lên đầu trang