Yêu em Thu Nga CN12 ptit
Senior Member
quên chưa xóa đấy fenThank bác! Mà cái biến cnt dùng để làm gì vậy?

quên chưa xóa đấy fenThank bác! Mà cái biến cnt dùng để làm gì vậy?

class Solution:
def findDuplicates(self, nums: List[int]) -> List[int]:
res = []
for n in nums:
absn = abs(n)
idx = absn - 1
if nums[idx] < 0:
res.append(absn)
else:
nums[idx] = -nums[idx]
return res
Fen này siêng nhẻ lập nhóm cuối tuần chiến leetcode weekly contest fenTiếp tục chuyên mục mỗi ngày một leetcode. Các bài mình làm ngày hôm nay:
#440. (Hard) https://leetcode.com/problems/k-th-smallest-in-lexicographical-order/
#441. (Easy) https://leetcode.com/problems/arranging-coins/
#442. (Medium) https://leetcode.com/problems/find-all-duplicates-in-an-array/
#443. (Medium) https://leetcode.com/problems/string-compression/
Mình sẽ share về bài Find All Duplicates in an Array:
#442. (Medium) https://leetcode.com/problems/find-all-duplicates-in-an-array/
Phân tích bài toán:
Solution:
- 1 <= n <= 10^5: O(n) là đẹp
- Nhận thấy bài này có thể thực hiện dễ dàng bằng cách sử dụng HashSet với độ phức tạp là O(n) cả thời gian và không gian
- Tuy nhiên trong bài lại kèm điều kiện: You must write an algorithm that runs in O(n) time and uses only constant extra space.
- Để đạt với độ phức tạp không gian O(1), ta cần sử dụng thêm các dữ kiện khác trong bài toán. Mà cụ thể là: all the integers of nums are in the range [1, n]
- Thông thường khi gặp dạng bài có range value = array length như này, ta sẽ cần vận dụng một thông tin giá trị khác, đó là index của array
- Cụ thể hơn, vì mỗi một phần tử đều nằm trong khoảng [1, n], nên nó sẽ tương ứng với một index trong array [0, n - 1]. Ta cần khai thác tối đa đặc điểm này.
- Với bài này, mình sử dụng một kỹ thuật là đánh dấu bằng số âm.
- Với mỗi phần tử đã xuất hiện trong array, ta đánh dấu nó đã xuất hiện bằng cách set giá trị của phần tử tại vị trí tương ứng với nó về âm
- Như vậy, mỗi phần tử trong mảng có thể là âm hoặc dương, nên ta cần sử dụng trị tuyệt đối để lấy value đúng của nó
- Nếu một phần tử có index tương ứng đã bị set thành âm => nó đã xuất hiện trước đó => đây là số cần tìm
- Với mỗi số n trong nums
- Tính giá trị đúng của n = abs(n)
- Tính index tương ứng với idx = n - 1
- Nếu nums[idx] < 0: n là số cần tìm => Thêm vào mảng output
- Ngược lại: set nums[idx] = -nums[idx]
- Trả về mảng output
Python:class Solution: def findDuplicates(self, nums: List[int]) -> List[int]: res = [] for n in nums: absn = abs(n) idx = absn - 1 if nums[idx] < 0: res.append(absn) else: nums[idx] = -nums[idx] return res

. Hồi đó siêng mà dạo này lười quá bỏ bêNgày làm mấy bài mất khoảng 1 tiếng thôi chứ cũng k siêng gì. Mình cày để ngày sau pv, còn mấy cái contest thấy chua quá, k hạpFen này siêng nhẻ lập nhóm cuối tuần chiến leetcode weekly contest fen. Hồi đó siêng mà dạo này lười quá bỏ bê

. Nên thôi, thank fen, chúc fen siêng năng trở lại.Thì cũng 4 bài làm 1h30 phút mà chua gì fen, 1 easy, 2 med, 1 hard. Có điều làm dưới áp lực thời gian phê hơnNgày làm mấy bài mất khoảng 1 tiếng thôi chứ cũng k siêng gì. Mình cày để ngày sau pv, còn mấy cái contest thấy chua quá, k hạp. Nên thôi, thank fen, chúc fen siêng năng trở lại.


Ủa v à, trước h tưởng contest là dành cho tụi đỉnh của chóp thi, nên k đú vào bao hThì cũng 4 bài làm 1h30 phút mà chua gì fen, 1 easy, 2 med, 1 hard. Có điều làm dưới áp lực thời gian phê hơn![]()

https://leetcode.com/contest/weekly-contest-253Ủa v à, trước h tưởng contest là dành cho tụi đỉnh của chóp thi, nên k đú vào bao h![]()
![]()


Bọn này chúng nó có phải là người không vậy nhỉ? Có thằng làm 1 bài có 33s.

Tôi đọc đề xong cũng hết 10 phút mà có thằng nó giải toàn bộ trong vòng 5 phút kìa
Chắc nó từng làm trước rồi, vào copy paste lại thôiTôi đọc đề xong cũng hết 10 phút mà có thằng nó giải toàn bộ trong vòng 5 phút kìa
. Forum tụi nước ngoài ( bản xứ luôn ) nó cũng comment y chang, éo hiểu giải kiểu gì![]()
![]()
![]()
khả năng là đề bị leak, em hồi trước tham gia thi mấy bài của bên vng, chừng 3p là có đứa nộp bài rồi thím <(") em không hiểu nó giải đề kiểu gì nữaChắc nó từng làm trước rồi, vào copy paste lại thôi
Fen làm mấy bài mà mất có 1 tiếng thôi hả? Ghê vậy. t làm 1 bài hard cũng phải hơn 1 tiếng rồi. Nhiều khi ngồi nghĩ cả buổi mới ra. Thường t làm ra 1 solution chạy được rồi mới coi solution để tối ưu.Ngày làm mấy bài mất khoảng 1 tiếng thôi chứ cũng k siêng gì. Mình cày để ngày sau pv, còn mấy cái contest thấy chua quá, k hạp. Nên thôi, thank fen, chúc fen siêng năng trở lại.
Tôi đọc đề xong cũng hết 10 phút mà có thằng nó giải toàn bộ trong vòng 5 phút kìa
. Forum tụi nước ngoài ( bản xứ luôn ) nó cũng comment y chang, éo hiểu giải kiểu gì![]()
![]()
![]()

Oh my...tụi nó nhìn input và ouput là đoán dc đề rồi bạn ạ![]()
Trình độ cao nó thế bạn. Chứ ai rảnh mà ngồi đọc đề nữa.Oh my...
class Solution:
def numberOfBoomerangs(self, points: List[List[int]]) -> int:
res = 0
d = defaultdict(int)
for p in points:
d.clear()
for q in points:
dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1])
if dis > 0:
d[dis] += 1
for n in d.values():
res += n * (n - 1)
return res
