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

Bài nay có bác nào 1 line được JS bài hôm nay không biểu diễn cho em với
URoiprO.gif
.
Đang newbie JS còn chưa khai thác được syntax, quen kiểu code truyền thống nhìn không ngầu
K4Hcd5N.gif
.
1 line cũng không ngầu lắm đâu bác, em 1 line mà runtime 115ms cũng vứt, cầm code người khác run thì 80ms 1 forEach, thêm vòng for of
 
Last edited:
Bài hôm nay không dám làm 1 line:
Nay chuyển sang Javascript chơi thử, chơi Java lâu lắm rồi, runtime tận 168ms
JavaScript:
const map = arr.reduce((acc, num) => {
    acc[num] = (acc[num] || 0) + 1
    return acc
  }, {})
  const keyObjects = Object.keys(map).sort((a, b) => map[b] - map[a])
  let countMapKey = 0, sizeMap = 0
  for (const key of keyObjects) {
    countMapKey += map[key]
    sizeMap += 1
    if (countMapKey * 2 >= arr.length) {
      return sizeMap
    }
  }
  return arr.length || 0
 
C
Vâng em cảm ơn bác.Em cũng tính tham khảo để cho nó rành syntax thôi chứ trước em cũng có nghe chuyện người thật việc thật; ông đấy giải bài thì giỏi lắm, mà vào coding interview toàn ham làm code ngắn, 1 line bị downgrade xuống làm tester.
V092S5K.gif
Công ty nào mà 1 line code bị xuống làm tester vậy thím. Nói để anh em né :(
Ngoại trừ BoschRBVH VN còn làm chiêu đó cho fresher thôi chớ.
 
do nó cho điều kiện 1 <= arr[.i] <= 10^5 nên xài array 100k phần tử hay 100k lẻ 1 phần tử là được ròi

https://leetcode.com/submissions/detail/776546012/ ez 98%
uq1dgnk.png


C++:
    int minSetSize(vector<int>& arr) {
        array<int, 100'001> m{};
        for (int a : arr) ++m[a];
        sort(begin(m), end(m), greater<int>{});
        for (int cnt = 0, i = 0; i < m.size(); ++i) if ((cnt += m[i]) >= arr.size() / 2) return i + 1;
        return 0;
    }

có thể làm ngay in-place cái mảng arr cũng được, code này xài 1 mảng 100k phần tử mà hơn 99.84% mem ròi, in-place ko tốn thêm bộ nhớ chắc ăn chăm phần chăm
FY7e6U1.png
nhưng mà sort 2 lần chắc chạy chậm hơn
LTT2cUR.png


edit: chăm phần chăm mem
cgE9MkI.gif
https://leetcode.com/submissions/detail/776558585/
 
Last edited:
1 line bàng môn tà đạo học làm gì mấy fen, chơi chơi cho vui thôi.
1 line cũng không ngầu lắm đâu bác, em 1 line mà runtime 115s cũng vứt, cầm code người khác run thì 80s 1 forEach, thêm vòng for of
1 line mà vẫn beat 100% này. :)
Python:
return len(list(takewhile(lambda x: x < len(arr)//2, accumulate(sorted(Counter(arr).values(), reverse=True))))) + 1
1660792874659.png

Bài hôm nay cũng chỉ cần 1 dòng là đủ,:p
Python:
return reduce(lambda acc, e: (e[0], acc[1] + e[1]) if acc[1] < (len(arr)+1)//2 else acc, enumerate(sorted((val for key, val in Counter(arr).items()), reverse=True)))[0]+1

Có thím nào biết cách break cái reduce ở giữa mà k cần chạy hết list k? hoặc dùng cái khác ngoài reduce cũng được, :D
Mình dùng accumulate nó trả về generator, cái kết quả trả về takewhile là được. :)
Cái reduce muốn break giữa chừng có 1 cách là chặt cái input list giữa chừng, nhưng mà bài này input list là output của hàm Counter() nên không làm thế được. :)
 
Cũng phải sort nên nlogn mà sao các bác Python toàn 100% vậy nhỉ? :)
Screen Shot 2022-08-18 at 14.51.41.png

Code:
func minSetSize(arr []int) int {
    mapArr, arrSort, removed, count := make(map[int]int), make([]int, 0), 0, 0
    for _, value := range arr {
        if mapArr[value] == 0 {
            arrSort = append(arrSort, value)
        }
        mapArr[value]++
    }
    sort.Slice(arrSort, func(i, j int) bool {
        return mapArr[arrSort[i]] > mapArr[arrSort[j]]
    })
    index := 0
    for removed < len(arr)/2 {
        removed += mapArr[arrSort[index]]
        count++
        index++
    }
    return count
}
 
https://leetcode.com/submissions/detail/776834812/
Cũng tuỳ ngôn ngữ, như solution của mình là đếm lần bằng dictionary rồi sort mà hơi ngốn memory.
Bên C# muốn dùng reduce như javascript thì phải import thằng LinQ vào, mà mình ko muốn xài linQ tí nào vì hư hết cả người
View attachment 1330092

Thấy mấy bác ở trên code js, python thấy toàn dùng hàm có sẵn kb của ngôn ngữ support hay thư viện ngoài. Vì trên leetcode cũng import thư việc trên github vào. Như mình cứ code chay if, else, for, while của ngôn ngữ thôi cùng lắm là lười thì dùng luôn sort chứ đi pv kiểu gì cũng bắt implement sort :)
 
[QUOTE="nhoccoi96vp, post: 19710930]
Thấy mấy bác ở trên code js, python thấy toàn dùng hàm có sẵn kb của ngôn ngữ support hay thư viện ngoài. Vì trên leetcode cũng import thư việc trên github vào. Như mình cứ code chay if, else, for, while của ngôn ngữ thôi cùng lắm là lười thì dùng luôn sort chứ đi pv kiểu gì cũng bắt implement sort :)
[/QUOTE]

Cứ dùng các DS cơ bản, rồi dùng for while thôi chứ ai lại dùng thư viện ngoài làm gì.
Xong bị hỏi độ phức tạp như thế nào thì làm gì phân tích được vì đâu phải tự viết code đâu.
Mấy fence kia toàn sinh viên nên thần thánh hóa những cái như là 1 dòng chứ như mình đi làm Senior dev bao nhiêu năm rồi cứ phải viết rõ ràng ra rồi tối ưu dần dần.

Sent from Samsung SM-G996B using vozFApp
 
[QUOTE="nhoccoi96vp, post: 19710930]
Thấy mấy bác ở trên code js, python thấy toàn dùng hàm có sẵn kb của ngôn ngữ support hay thư viện ngoài. Vì trên leetcode cũng import thư việc trên github vào. Như mình cứ code chay if, else, for, while của ngôn ngữ thôi cùng lắm là lười thì dùng luôn sort chứ đi pv kiểu gì cũng bắt implement sort :)

Cứ dùng các DS cơ bản, rồi dùng for while thôi chứ ai lại dùng thư viện ngoài làm gì.
Xong bị hỏi độ phức tạp như thế nào thì làm gì phân tích được vì đâu phải tự viết code đâu.
Mấy fence kia toàn sinh viên nên thần thánh hóa những cái như là 1 dòng chứ như mình đi làm Senior dev bao nhiêu năm rồi cứ phải viết rõ ràng ra rồi tối ưu dần dần.

Sent from Samsung SM-G996B using vozFApp
[/QUOTE]

Mấy ông 1line toàn senior thôi, đấy là đam mê của họ mà chứ có khuyên ai làm theo đâu :giggle:

Gửi từ Realme RMX3301 bằng vozFApp
 
bài hôm qua mình đọc không hiểu đề lắm, có bác nào giải thích lại giúp mình với ạ. Mình cảm ơn
Đề bài hiểu là cho 1 mảng gồm các dãy số int, chọn ra các số trong dãy sao cho số lần các số đã chọn là nhỏ nhất và tổng số lần xuất hiện các số đã chọn trong dãy > length/2 và đếm các số đã chọn
 
Đề bài hiểu là cho 1 mảng gồm các dãy số int, chọn ra các số trong dãy sao cho số lần các số đã chọn là nhỏ nhất và tổng số lần xuất hiện các số đã chọn trong dãy > length/2 và đếm các số đã chọn
cái expected 2: là đếm số đã chọn đúng không bác nhỉ. Thank bác nhé, em hiểu rồi
 
cái expected 2: là đếm số đã chọn đúng không bác nhỉ. Thank bác nhé, em hiểu rồi
Nó chỉ expect là chọn cách nào đấy để số lần xuất hiện các số đã chọn trong dãy là lớn hơn length /2 và tổng số các số đã chọn là nhỏ nhất.
Vụ đếm lần thì coi là hint của mình đi fence
 
Submit đến lần thứ 7 mới ăn:

Ý tưởng là dùng 2 priority queue, lưu độ dài subsequence kết thúc bởi i và i-1. Ở mỗi vòng lặp thì thử nối i với subsequence ngắn nhất kết thúc bởi i-1.

1660880033112.png
 
Medium nay hơi chua, đọc discussions đến đoạn i với i-1 mới ngớ ra để làm :beat_brick:, cơ mà hiểu đúng cái thì nó lại đơn giản, ăn luôn submission đầu tiên :beauty:
 
bài hôm nay mấy bác tiếp cận kiểu sao vậy?
Thay vì post code mấy bác nói về cách tiếp cận + giải thuật cơ bản được không
 
Back
Top