có 2 điểm ko ngờ thoy mà có gì khó đâutự tìm hiểu não mới to bằng người viết được
trừ cái code inverse square root gì ra ko tự hiểu được thoy![]()
![]()
Thử mò đi. Ý tưởng của cái code đó là apply 1 step của Newton method.
có 2 điểm ko ngờ thoy mà có gì khó đâutự tìm hiểu não mới to bằng người viết được
trừ cái code inverse square root gì ra ko tự hiểu được thoy![]()
![]()
defmodule Solution do
def is_power_of_four(n) when n <= 0, do: false
def is_power_of_four(1), do: true
def is_power_of_four(n) when rem(n, 4) != 0, do: false
def is_power_of_four(n), do: n |> div(4) |> is_power_of_four()
end
Không đồng tình với quan điểm tự tìm hiểu lắm.có 2 điểm ko ngờ thoy mà có gì khó đâutự tìm hiểu não mới to bằng người viết được
trừ cái code inverse square root gì ra ko tự hiểu được thoy![]()
![]()
đoạn trên sao ko dùng __builtin_ctz cho nhanh bácCách giải không cần loop, không cần hàm hỗ trợ (__builtin_clz là một instruction có sẵn, gọi trực tiếp assembly thay vào cũng được). Test n in array bản chất vẫn là loop rồi.
C++:bool isPowerOfFour(int n) { auto lg2 = n > 0 ? sizeof(n)*8 - 1 - __builtin_clz(n) : -1; return n > 0 && (lg2 % 2 == 0) && ((1LL << lg2) == n); }
Cách khác:
Giải thích: để là lũy thừa của 4 thì cần:C++:bool isPowerOfFour(int n) { return n > 0 && (n & (n-1) == 0) && (n & 0x55555555)); }
- Lớn hơn 0
- Là lũy thừa của 2. Tức biểu diễn nhị phân có dạng 1000...000. Khi đó n & (n-1) == 10...000 & 01...111 = 0
- Bit 1 phải nằm ở vị trí lẻ. Số 0x55555555 có biểu diễn nhị phân là 010101...01, khi and với n sẽ trả về khác 0 nếu trong n có 1 bit ở vị trí lẻ.
đoạn trên sao ko dùng __builtin_ctz cho nhanh bác
nhưng bên dưới bác có đoạn ((1LL << lg2) == n) rồi, nếu đếm lg2 bằng ctz mà ko phải lũy thừa của 2 thì cũng false màctz chỉ dùng được khi đã biết chắc nó là lũy thừa của 2. Mà đã biết vậy thì dùng luôn cách dưới.
Sent from Xiaomi M2007J20CG using vozFApp
cũng hợp lý nhưng ngày 10 bài là quá nhiều,nghĩ 15 phút cũng tốn 150 fut rồi,còn đọc giải implement lại thì cũng fai 2 tiếng nữa là ítKhông đồng tình với quan điểm tự tìm hiểu lắm.
Với cái leetcode này trừ khi làm vì sở thích và đam mê còn nếu làm để đi phỏng vấn thì cách cày là đọc cách giải liên tục mới cram được nhiều trong thời gian ngắn.
Theo quan điểm của tui cách cày leetcode là:
1. Mua premium membership của thằng leetcode hoặc algo expert
2. Ngày luyện tầm 10 câu trở lên (tính cả những câu đã làm rồi giờ làm lại).
3. Cho mỗi câu 15 phút suy nghĩ thôi. Nếu suy nghĩ không ra hướng thì đọc đáp án cho bằng hiểu (cái này có membership premium bọn nó sẽ giải thích dễ hiểu hơn từng bước). Sau đó implement lại đáp án mà không nhìn vào đáp án nữa.
4. Cứ lặp đi lặp lại như vậy cho đến khi nhớ được cách giải của càng nhiều bài càng tốt. Đến lúc phỏng vấn thì trúng tủ là đỗ không trúng tủ là trượt. (Mấy đứa giỏi hơn thì "hơi trúng tủ" bọn nó cũng đỗ vì nó đầu óc hơn nên biết biến đổi về dạng quen thuộc. Dạng này không nhiều và hầu hết là IOI với ACM rồi)
Theo quan điểm của tui thì đây là lý do khiến cho nhiều ông làm FAANG mà đi phỏng vấn không phải đỗ 90% trở lên được. Nhiều ông trên LinkedIn còn "khoe" là trượt cả chục lần FAANG mới đỗ. Rồi đừng bỏ cuộc các thứ...
Nói chung là phải cày nhiều để trúng tủ, vậy nên tự tìm hiểu thì đến tám kiếp mới cày đủ để tăng xác xuất trúng tủ...
đọc cách giải liên tục thì ko khác gì luyện gà cả, có tăng được tí nếp nhăn nào đâuKhông đồng tình với quan điểm tự tìm hiểu lắm.
Với cái leetcode này trừ khi làm vì sở thích và đam mê còn nếu làm để đi phỏng vấn thì cách cày là đọc cách giải liên tục mới cram được nhiều trong thời gian ngắn.
Theo quan điểm của tui cách cày leetcode là:
1. Mua premium membership của thằng leetcode hoặc algo expert
2. Ngày luyện tầm 10 câu trở lên (tính cả những câu đã làm rồi giờ làm lại).
3. Cho mỗi câu 15 phút suy nghĩ thôi. Nếu suy nghĩ không ra hướng thì đọc đáp án cho bằng hiểu (cái này có membership premium bọn nó sẽ giải thích dễ hiểu hơn từng bước). Sau đó implement lại đáp án mà không nhìn vào đáp án nữa.
4. Cứ lặp đi lặp lại như vậy cho đến khi nhớ được cách giải của càng nhiều bài càng tốt. Đến lúc phỏng vấn thì trúng tủ là đỗ không trúng tủ là trượt. (Mấy đứa giỏi hơn thì "hơi trúng tủ" bọn nó cũng đỗ vì nó đầu óc hơn nên biết biến đổi về dạng quen thuộc. Dạng này không nhiều và hầu hết là IOI với ACM rồi)
Theo quan điểm của tui thì đây là lý do khiến cho nhiều ông làm FAANG mà đi phỏng vấn không phải đỗ 90% trở lên được. Nhiều ông trên LinkedIn còn "khoe" là trượt cả chục lần FAANG mới đỗ. Rồi đừng bỏ cuộc các thứ...
Nói chung là phải cày nhiều để trúng tủ, vậy nên tự tìm hiểu thì đến tám kiếp mới cày đủ để tăng xác xuất trúng tủ...

Không đồng tình với quan điểm tự tìm hiểu lắm.
Với cái leetcode này trừ khi làm vì sở thích và đam mê còn nếu làm để đi phỏng vấn thì cách cày là đọc cách giải liên tục mới cram được nhiều trong thời gian ngắn.
Theo quan điểm của tui cách cày leetcode là:
1. Mua premium membership của thằng leetcode hoặc algo expert
2. Ngày luyện tầm 10 câu trở lên (tính cả những câu đã làm rồi giờ làm lại).
3. Cho mỗi câu 15 phút suy nghĩ thôi. Nếu suy nghĩ không ra hướng thì đọc đáp án cho bằng hiểu (cái này có membership premium bọn nó sẽ giải thích dễ hiểu hơn từng bước). Sau đó implement lại đáp án mà không nhìn vào đáp án nữa.
4. Cứ lặp đi lặp lại như vậy cho đến khi nhớ được cách giải của càng nhiều bài càng tốt. Đến lúc phỏng vấn thì trúng tủ là đỗ không trúng tủ là trượt. (Mấy đứa giỏi hơn thì "hơi trúng tủ" bọn nó cũng đỗ vì nó đầu óc hơn nên biết biến đổi về dạng quen thuộc. Dạng này không nhiều và hầu hết là IOI với ACM rồi)
Theo quan điểm của tui thì đây là lý do khiến cho nhiều ông làm FAANG mà đi phỏng vấn không phải đỗ 90% trở lên được. Nhiều ông trên LinkedIn còn "khoe" là trượt cả chục lần FAANG mới đỗ. Rồi đừng bỏ cuộc các thứ...
Nói chung là phải cày nhiều để trúng tủ, vậy nên tự tìm hiểu thì đến tám kiếp mới cày đủ để tăng xác xuất trúng tủ...

Ngày tui nhiều nhất 7,8 câu mới thôi nhưng hơn 10 câu cả cũ lẫn mới là được mà. Hơn 10 câu là tính cả những câu cũ đã làm rồi được randomly pick nên có thể làm lại đó. Mấy câu đó thì làm nhanh mà, ôn lại nên đọng được vào đầu chứ có phải 10 câu mới toanh đâu. À mà easy thì auto bỏ qua nhé, đừng làm làm gì tốn thời gian. Chỉ luyện medium với hard thôi.Ngày 10 câu thì 1 tuần là tẩu hỏa nhập ma rồi bác
1 ngày mà e phải làm >3 câu med trở lên là đã ko muốn nghĩ rồi. Nhất là hôm nào vừa có weekly contest + daily + 2->3 câu của study plan là quá tải đcđ
class Solution:
def isPalindrome(self, head: Optional[ListNode]) -> bool:
arr = []
while head:
arr.append(head.val)
head = head.next
left = 0
right = len(arr) - 1
while left < right:
if arr[left] != arr[right]:
return False
left += 1
right -= 1
return True
cho dãy
num = [1, 1, 1, '@', 1, 1, 1, *, 1, ^, &, ), 1, 1, g, j, w, 1]
dùng O(N) để ra các range của các số "1" trong dãy thì dùng thuật toán gì vậy các bác
res = [[0, 2], [4, 6], [8, 8], [12, 13], [16, 16]]
Follow up: Could you do it in O(n) time and O(1) space?
Chưa làm đc cái follow up này nên làm cách bình thường O(n) space
Python:class Solution: def isPalindrome(self, head: Optional[ListNode]) -> bool: arr = [] while head: arr.append(head.val) head = head.next left = 0 right = len(arr) - 1 while left < right: if arr[left] != arr[right]: return False left += 1 right -= 1 return True
@_Gia_Cat_Luong_ , @Zayt__ bài này code kiểu gì nhanh vậy các bác
tks bác nha, để tui thử code xem sao, thao tác trên array, cái này giống hồi học C++ quá, khó màBài daily thì không có gì để bàn rồi, làm O(1) space thì dùng slow / fast pointer, nói chung hơi tà đạo, không biết cũng không sao..
Còn bài dưới, sau bao phát biểu đầy não, đậm nếp nhăn thì thím có thể hỏi 1 câu như này được à ?
- Lặp từ đầu tới cuối
- Gặp số 1 mà trước đó không phải là số 1 thì đánh dấu lại
- Gặp số khác 1 mà trước đó là số 1 thì lưu kết quả vào output

nick nhiều người dùngCòn bài dưới, sau bao phát biểu đầy não, đậm nếp nhăn thì thím có thể hỏi 1 câu như này được à ?

