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.
OG0lsXv.png
bài hôm nay ảo thế? Làm hoài vẫn sai?


Untitled.png
 
OG0lsXv.png
done

Mệt mỏi với mấy thằng reverse dynamic programming vl

Untitled.png


Đại khái nó cũng gần giống bài climbing stairs. Thay vì chọn bước 1 bước hay bước 2 bước thì mình chọn bước trái hay bước phải. Số điểm nó sẽ có lúc lặp lại:doubt: -> tối ưu bằng dp


Lúc đầu tôi vẽ decision tree thì cũng kiểu chọn trái hay chọn phải. Chọn một hồi thì cứ max từng nhánh mà chọn -> lộn qua greedy -> sai -> xem solution -> ngộ ra
Qcg0oqw.jpg
 
Sửa lần cuối:
Phải chơi 2 mảng dp cho left/right mới qua được.
O(m^2) time, O(n) space.

https://leetcode.com/submissions/detail/800925640/
dỏm, dp người ta xài có 2 vòng for kìa
JiZo9zf.png


OG0lsXv.png
done

Mệt mỏi với mấy thằng reverse dynamic programming vl



Đại khái nó cũng gần giống bài climbing stairs. Thay vì chọn bước 1 bước hay bước 2 bước thì mình chọn bước trái hay bước phải. Số điểm nó sẽ có lúc lặp lại:doubt: -> tối ưu bằng dp


Lúc đầu tôi vẽ decision tree thì cũng kiểu chọn trái hay chọn phải. Chọn một hồi thì cứ max từng nhánh mà chọn -> lộn qua greedy -> sai -> xem solution -> ngộ ra
Qcg0oqw.jpg

code 2 vòng for đơn giản thặc
KV0XGIA.gif


https://leetcode.com/submissions/detail/801244938/
C++:
struct Solution {
    int maximumScore(vector<int>& N, vector<int>& M) {
        vector<int> arr(M.size() + 1);
        for (int k = M.size(); k--;)
            for (int i = 0; i <= k; ++i)
                arr[i] = max(M[k] * N[i] + arr[i + 1], M[k] * end(N)[i - k - 1] + arr[i]);
        return arr[0];
    }
};
 
Chạy chậm quá chứ sao nữa.
Cái vòng lặp ở dòng 21 không phải chạy từ 0 đến word.size() đâu.
Nhớ tìm minLength với maxLength của cái đống words xong rồi chạy sao cho cái string prefix với suffix chỉ nằm trong khoảng minLength với maxLength là chạy nhanh hơn nhiều
 
Chạy chậm quá chứ sao nữa.
Cái vòng lặp ở dòng 21 không phải chạy từ 0 đến word.size() đâu.
Nhớ tìm minLength với maxLength của cái đống words xong rồi chạy sao cho cái string prefix với suffix chỉ nằm trong khoảng minLength với maxLength là chạy nhanh hơn nhiều
có cái test thứ 135 https://leetcode.com/submissions/detail/801687063/ nó cho 5000 từ mỗi từ 300 ký tự luôn, chạy mất 1.1s ròi
LTT2cUR.png
toy phải chuyển qua string_view cho nó đỡ cấp phát động chỗ tách word thành prefix suffix pass hết mà nó lại chê lâu mới đao lòng
LTT2cUR.png
LTT2cUR.png
LTT2cUR.png


xem đáp án chúng nó viết cái trie mới qua
LTT2cUR.png
LTT2cUR.png
LTT2cUR.png
 
- Bài này làm 1 tháng trước r.

  • Ý tưởng tạo 1 hash map lưu các từ trong words
  • xét từng từ trong words
  • duyệt từ index i: 0 -> word.size() - 1 của từ đó
  • nếu substring (i + 1 -> word.size() - 1) là Palindrome và reverse của substring (0 -> i) là 1 từ thuộc words thì đó là 1 cặp. (TH bên trái nữa)
  • Tối ưu một tí thì ms accept đc
 
Sửa lần cuối:
có cái test thứ 135 https://leetcode.com/submissions/detail/801687063/ nó cho 5000 từ mỗi từ 300 ký tự luôn, chạy mất 1.1s ròi
LTT2cUR.png
toy phải chuyển qua string_view cho nó đỡ cấp phát động chỗ tách word thành prefix suffix pass hết mà nó lại chê lâu mới đao lòng
LTT2cUR.png
LTT2cUR.png
LTT2cUR.png


xem đáp án chúng nó viết cái trie mới qua
LTT2cUR.png
LTT2cUR.png
LTT2cUR.png
Không cần Trie đâu bác. HashMap là đủ rồi.
Vấn đề là phải tìm maxLength, minLength rồi limit cái vòng lặp dòng 21 của bác thôi.

https://leetcode.com/submissions/detail/801683667/
Cái này Java nhưng mà HashMap không Trie vẫn beat 100% fast
 
Không cần Trie đâu bác. HashMap là đủ rồi.
Vấn đề là phải tìm maxLength, minLength rồi limit cái vòng lặp dòng 21 của bác thôi.

https://leetcode.com/submissions/detail/801683667/
Cái này Java nhưng mà HashMap không Trie vẫn beat 100% fast
làm phát chăm phần chăm luôn
u3720e4.png
u3720e4.png
u3720e4.png
u3720e4.png
https://leetcode.com/submissions/detail/801715290/ 195ms lẹ hơn cái code 100% 290ms tận 1/3 thời gian
kH9BFd2.gif


thằng lào viết test case chắc ko nghĩ tới cái minLen maxLen này à
ghXpJrI.png
có case nào mà cách này chậm ko

hack quá hack quá
g8XXj8u.gif
g8XXj8u.gif


------

holi shiet toy tìm ra được test case nó chạy tận 2.5s này
Qz8dGvJ.png
Qz8dGvJ.png
submit test case lấy coin thoy
cgE9MkI.gif


nó là test case 135 hồi nãy 5000 chuỗi 300 ký tự nhưng có 1 chuỗi empty thành 4999 chuỗi 300 ký tự và 1 chuỗi empty. Làm vậy thì minLen=0 maxLen=300 chứ ko còn minLen=300 maxLen=300 mà "hack" chạy lẹ O(NWW) thành O(NW) nữa
g8XXj8u.gif
 

Tệp đính kèm

Sửa lần cuối:
làm phát chăm phần chăm luôn
u3720e4.png
u3720e4.png
u3720e4.png
u3720e4.png
https://leetcode.com/submissions/detail/801715290/ 195ms lẹ hơn cái code 100% 290ms tận 1/3 thời gian
kH9BFd2.gif


thằng lào viết test case chắc ko nghĩ tới cái minLen maxLen này à
ghXpJrI.png
có case nào mà cách này chậm ko

hack quá hack quá
g8XXj8u.gif
g8XXj8u.gif


------

holi shiet toy tìm ra được test case nó chạy tận 2.5s này
Qz8dGvJ.png
Qz8dGvJ.png
submit test case lấy coin thoy
cgE9MkI.gif


nó là test case 135 hồi nãy 5000 chuỗi 300 ký tự nhưng có 1 chuỗi empty thành 4999 chuỗi 300 ký tự và 1 chuỗi empty. Làm vậy thì minLen=0 maxLen=300 chứ ko còn minLen=300 maxLen=300 mà "hack" chạy lẹ O(NWW) thành O(NW) nữa
g8XXj8u.gif
Submit test lấy thưởng đi bác.
https://leetcode.com/submissions/detail/801740214/
Cái này sửa một chút là gọi HashMap trước rồi check palindrome sau mất 890ms cho cái test case của bác. Không biết thế này có được accept ko
 
làm phát chăm phần chăm luôn
u3720e4.png
u3720e4.png
u3720e4.png
u3720e4.png
https://leetcode.com/submissions/detail/801715290/ 195ms lẹ hơn cái code 100% 290ms tận 1/3 thời gian
kH9BFd2.gif


thằng lào viết test case chắc ko nghĩ tới cái minLen maxLen này à
ghXpJrI.png
có case nào mà cách này chậm ko

hack quá hack quá
g8XXj8u.gif
g8XXj8u.gif


------

holi shiet toy tìm ra được test case nó chạy tận 2.5s này
Qz8dGvJ.png
Qz8dGvJ.png
submit test case lấy coin thoy
cgE9MkI.gif


nó là test case 135 hồi nãy 5000 chuỗi 300 ký tự nhưng có 1 chuỗi empty thành 4999 chuỗi 300 ký tự và 1 chuỗi empty. Làm vậy thì minLen=0 maxLen=300 chứ ko còn minLen=300 maxLen=300 mà "hack" chạy lẹ O(NWW) thành O(NW) nữa
g8XXj8u.gif
Testcase này muốn nhanh thì đừng có loop từ min_len đến max_len nữa mà build 1 cái hash map, chứa len của các words. Rồi loop trong cái hash map đó thôi. 😁
Nếu testcase có đủ len từ 0 đến 300 thì vẫn phải loop hết thôi.
 
Sửa lần cuối:
Testcase này muốn nhanh thì đừng có loop từ min_len đến max_len nữa mà build 1 cái hash map, chứa len của các words. Rồi loop trong cái hash map đó thôi. 😁
Nếu testcase có đủ len từ 0 đến 300 thì vẫn phải loop hết thôi.

Vậy cho test case 4700 chuỗi len 300, còn lại len từ 299 --> 1 là hết mấy trò chơi trick.
 
Testcase này muốn nhanh thì đừng có loop từ min_len đến max_len nữa mà build 1 cái hash map, chứa len của các words. Rồi loop trong cái hash map đó thôi. 😁
Nếu testcase có đủ len từ 0 đến 300 thì vẫn phải loop hết thôi.
Ý tưởng thì đúng nhưng dùng TreeSet thì hợp lý hơn HashMap.
Cái test case kia giờ xuống chạy từ 899ms xuống 36ms với Java
https://leetcode.com/submissions/detail/801768878/
Vẫn faster than 96.97% Java
 
Submit test lấy thưởng đi bác.
https://leetcode.com/submissions/detail/801740214/
Cái này sửa một chút là gọi HashMap trước rồi check palindrome sau mất 890ms cho cái test case của bác. Không biết thế này có được accept ko
submit test có thấy chả lời gì đâu chắc phải submit trên github à
LTT2cUR.png


Ý tưởng thì đúng nhưng dùng TreeSet thì hợp lý hơn HashMap.
Cái test case kia giờ xuống chạy từ 899ms xuống 36ms với Java
https://leetcode.com/submissions/detail/801768878/
Vẫn faster than 96.97% Java
thử 4700 words length 300 và 300 words len từ 0-299 của bác bribnt chưa
MjfezZB.png
cũng vậy thoy hack quá
JEWoIdl.png


ví dụ toy generate từ test case 135 nè:

script python:
Python:
a = [...] # test case 135
import random
random_indices = random.sample(range(len(a)), min(300, len(a)))
word_len = 0
for i in random_indices:
    a[i] = a[i][0:word_len]
    word_len += 1

with open('336.txt', 'w') as f:
    f.write('[')
    f.write(f'"{a[0]}"')
    for i in range(1, len(a)): f.write(f',"{a[i]}"')
    f.write(']')
 

Tệp đính kèm

Sửa lần cuối:
submit test có thấy chả lời gì đâu chắc phải submit trên github à
LTT2cUR.png



thử 4700 words length 300 và 300 words len từ 0-299 của bác bribnt chưa
MjfezZB.png
cũng vậy thoy hack quá
JEWoIdl.png


ví dụ toy generate từ test case 135 nè:
Xác nhận là cái test case này làm TLE tất cả các cách nhé. Trie cũng chết nốt. Trie còn chậm hơn HashMap trừ khi Trie là nhiều ký tự trở lên ở mỗi level thì tui chưa thử.
 
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.212.708
Quay lại
Lên đầu trang