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
Xem tệp đính kèm 3790336
từ mấy năm trước :byebye:
giờ đến cuối năm thừa 100 days badge
reach 500 bài + 100 days badge rồi đi pvan tiếp vậy, gần đây làm dev bị dí deadline dữ quá bác ạ, cứ bảo có AI phải làm nhanh, bào token xíu là tới limit rồi, thấy bên devops làm task infra khôn tốn nhiêu token hết, chắc phải nhảy xuồng thôi :sexy_girl:
 
Python:
class Solution:
    def averageOfSubtree(self, root: TreeNode) -> int:
        def helper(root: TreeNode) -> int:
            if not root:
                return 0
            res = 0
            count = 0
            def totalSubTree(root: TreeNode) -> int:
                if not root:
                    return 0
                nonlocal count
                count += 1
                return root.val + totalSubTree(root.left) + totalSubTree(root.right)
            root_total = totalSubTree(root)
            if root.val == math.floor(root_total / count):
                res = 1
            return res + helper(root.left) + helper(root.right)
        
        return helper(root)
 
reach 500 bài + 100 days badge rồi đi pvan tiếp vậy, gần đây làm dev bị dí deadline dữ quá bác ạ, cứ bảo có AI phải làm nhanh, bào token xíu là tới limit rồi, thấy bên devops làm task infra khôn tốn nhiêu token hết, chắc phải nhảy xuồng thôi :sexy_girl:
sáng tranh thủ zo được bài thôi fen. Có AI càng lắm việc clm :ah:
 
C++:
class Solution {
    public:
        int totalNumbers(const std::vector<int> &digits) {
            std::array<int, 10> a{0};
            for (const int &i: digits) ++a[i];

            int t = 0;
            for (int i = 1; i < 10; ++i) {
                if (!a[i]) continue;

                for (int j = 0; j < 10; ++j) {
                    if (a[j] < (i == j) + 1) continue;

                    for (int k = 0; k < 10; k += 2) {
                        if (a[k] < (i == k) + (j == k) + 1) continue;
                        ++t;
                    }
                }
            }
            return t;
        }
};
 
:shame:
Java:
class Solution {
    public int totalNumbers(int[] digits) {
        int[] freq = new int[10];
        for (int d : digits) {
            freq[d]++;
        }
        int ans = 0;
        for (int num = 100; num <= 998; num += 2) {
            int d1 = num / 100, d2 = (num / 10) % 10, d3 = num % 10;
            freq[d1]--; freq[d2]--; freq[d3]--;
            if (freq[d1] >= 0 && freq[d2] >= 0 && freq[d3] >= 0) {
                ans++;
            }
            freq[d1]++; freq[d2]++; freq[d3]++;
        }
        return ans;
    }
}
 
Bài này trước giải rồi, nhìn code bây giờ so với hồi xưa clean hơn hẳn :smile:
C-like:
func totalNumbers(digits []int) int {
    res := 0
    numsMap := make(map[int]struct{}, 0)
    for i := 0; i < len(digits); i++ {
        if digits[i] != 0 {
            for j := 0; j < len(digits); j++ {
                for k := 0; k < len(digits); k++ {
                    if i != j && j != k && i != k {
                        temp := digits[i] * 100 + digits[j] * 10 + digits[k]
                        _, ok := numsMap[temp]
                        if temp % 2 == 0 && !ok {
                            res++
                        }
                        numsMap[temp] = struct{}{}
                    }
                }
            }
        }
    }
    return res
}
C#:
public class Solution {
    public int TotalNumbers(int[] digits) {
        int n = digits.Length, count = 0;
        var set = new HashSet<int>();
        for (int i = 0; i < n; i++)
        {
            var isUse = new bool[n];
            if (digits[i] != 0)
            {
                isUse[i] = true;
                int temp = digits[i];
                for (int j = 0; j < n; j++)
                {
                    if (!isUse[j])
                    {
                        isUse[j] = true;
                        temp *= 10;
                        temp += digits[j];
                        for (int k = 0; k < n; k++)
                        {
                            if (!isUse[k])
                            {
                                temp *= 10;
                                temp += digits[k];
                                if (temp % 2 == 0 && !set.Contains(temp))
                                {
                                    count++;
                                    set.Add(temp);
                                }
                                temp /= 10;
                            }
                        }
                        temp /= 10;
                        isUse[j] = false;
                    }
                }
                isUse[i] = false;
            }
        }
        return count;
    }
}

Go ăn mem ít hơn C# 7 lần :surrender:
1789089325239.webp
 
Sửa lần cuối:
10^3 cho nhẹ đầu
Python:
class Solution:
    def totalNumbers(self, digits: List[int]) -> int:
        res = set()
        n = len(digits)
        for i in range(n):
            if digits[i] == 0:
                continue
            for j in range(n):
                if j == i:
                    continue
                for k in range(n):
                    if k == i or k == j or digits[k] % 2:
                        continue
                    
                    res.add(digits[i] * 100 + digits[j] * 10 + digits[k])
        
        return len(res)
 
:shame:
Java:
class Solution {
    public int totalNumbers(int[] digits) {
        int[] freq = new int[10];
        for (int d : digits) {
            freq[d]++;
        }
        int ans = 0;
        for (int num = 100; num <= 998; num += 2) {
            int d1 = num / 100, d2 = (num / 10) % 10, d3 = num % 10;
            freq[d1]--; freq[d2]--; freq[d3]--;
            if (freq[d1] >= 0 && freq[d2] >= 0 && freq[d3] >= 0) {
                ans++;
            }
            freq[d1]++; freq[d2]++; freq[d3]++;
        }
        return ans;
    }
}
cái lùm mía =)))
 

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.273
Quay lại
Lên đầu trang