HomeLập trìnhPythonCách giải quyết...

Cách giải quyết các vấn đề về Leetcode với Python One-Liners


Python là một trong những ngôn ngữ lập trình mạnh mẽ nhất. Nó cung cấp cho chúng tôi nhiều tính năng và chức năng độc đáo giúp chúng tôi viết mã dễ dàng.

Trong bài viết này, chúng ta sẽ giải quyết các vấn đề về mảng Leetcode trong một dòng bằng cách sử dụng một trong những tính năng thú vị nhất của Python – Danh sách hiểu.

Danh sách hiểu là gì?

Trước khi đi sâu vào các vấn đề, hãy đảm bảo rằng chúng ta hiểu tất cả về việc hiểu danh sách.

Khả năng hiểu danh sách là cấu trúc cú pháp có sẵn trong một số ngôn ngữ lập trình để tạo danh sách dựa trên danh sách hiện có
-Wikipedia

Hãy xem cách hiểu danh sách hoạt động với một ví dụ.

Hãy xem xét một mảng các số. Nhiệm vụ của chúng ta là cộng 1 vào số có chỉ số lẻ và cộng 2 vào số có chỉ số chẵn.

Bây giờ chúng ta sẽ xem cách giải quyết vấn đề trên bằng cách sử dụng cả vòng lặp for và hiểu danh sách.

Đọc thêm  Liệt kê mức độ hiểu trong Python

Cách giải quyết vấn đề với vòng lặp for

def addOneAndTwo(nums, n):
    for i in range(n):
        if i % 2 == 1:
            nums[i] += 1 
        else:
            nums[i] += 2 
    return nums

Làm thế nào để giải quyết nó với sự hiểu biết danh sách

def addOneAndTwo(nums, n):
    return [nums[i] + 1 if i % 2 == 1 else nums[i] + 2 for i in range(n)]

Bạn có thể thấy giải pháp sử dụng khả năng hiểu danh sách được đơn giản hóa như thế nào từ 6 dòng thành 1 dòng. Đây là sức mạnh của việc hiểu danh sách.

Cách giải quyết các vấn đề về Leetcode với khả năng hiểu danh sách

Bây giờ chúng ta hãy giải quyết các vấn đề Leetcode dưới đây trong 1 dòng bằng cách sử dụng khả năng hiểu danh sách.

1. Xáo trộn mảng

Đây là vấn đề từ Leetcode:

Cho mảng nums bao gồm 2n các phần tử trong biểu mẫu [x1,x2,...,xn,y1,y2,...,yn]. Trả về mảng ở dạng [x1,y1,x2,y2,...,xn,yn].

Ví dụ

Đầu vào: nums = [2,5,1,3,4,7]n = 3
Đầu ra: [2,3,5,4,1,7]

Giải: Vì x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 nên đáp số là [2,3,5,4,1,7].

Dung dịch

def shuffle(self, nums, n):
    return reduce(lambda a, b: a + b, [[nums[i], nums[j]] for i, j in zip(range(0, n), range(n, 2 * n))])

2. Số Cặp Tốt

Cho một mảng các số nguyên nums. Một đôi (i,j) được gọi là tốt nếu nums[i] == nums[j]i < j.Trả ​​lại số lượng tốt cặp.

Ví dụ

Đầu vào: nums = [1,2,3,1,1,3]
Đầu ra: 4

Giải thích: Có 4 cặp tốt (0,3), (0,4), (3,4), (2,5) 0-indexed.

Dung dịch

def numIdenticalPairs(self, nums):
    return sum([int(i != j and nums[i] == nums[j]) for i in range(0, len(nums)) for j in range(i + 1, len(nums))])

3. Những đứa trẻ có nhiều kẹo nhất

Cho mảng candies và số nguyên extraCandiesở đâu candies[i] đại diện cho số kẹo mà thứ i đứa trẻ có.

Đọc thêm  Python .split() – Tách chuỗi trong Python

Đối với mỗi đứa trẻ, hãy kiểm tra xem có cách nào để phân phối extraCandies trong số những đứa trẻ để chúng có thể có vĩ đại nhất số kẹo trong số đó. Lưu ý rằng nhiều trẻ em có thể có vĩ đại nhất số kẹo.

Ví dụ

Đầu vào: kẹo = [2,3,5,1,3]kẹo phụ = 3
Đầu ra: [true,true,true,false,true]

Giải thích: Bé 1 có 2 viên kẹo, nếu nhận thêm tất cả (3) viên kẹo thì sẽ có 5 viên kẹo – số kẹo nhiều nhất trong số các bé.

Bé 2 có 3 viên kẹo, nếu được thêm ít nhất 2 viên kẹo thì bé đó sẽ có số kẹo nhiều nhất.

Đứa thứ 3 có 5 cái kẹo, và đây đã là đứa trẻ có nhiều kẹo nhất.

Trẻ 4 có 1 viên kẹo, và ngay cả khi họ nhận được tất cả các viên kẹo thêm, họ sẽ chỉ có 4 viên kẹo.

Bé 5 có 3 viên kẹo, nếu được thêm ít nhất 2 viên kẹo thì bé đó sẽ có số kẹo nhiều nhất trong các bé.

Dung dịch

def kidsWithCandies(self, candies, extraCandies):
    return [candy + extraCandies >= max(candies) for candy in candies]

4. Giải nén Run-Length Encoded List

Chúng tôi được đưa cho một danh sách nums các số nguyên đại diện cho một danh sách được nén bằng mã hóa độ dài chạy.

Xét từng cặp phần tử liền kề [freq, val] = [nums[2*i], nums[2*i+1]] (với i >= 0). Đối với mỗi cặp như vậy, có freq các phần tử có giá trị val nối trong một danh sách con. Nối tất cả các danh sách con từ trái sang phải để tạo danh sách giải nén.

Đọc thêm  Cách thay thế Bash bằng Python làm ngôn ngữ dòng lệnh của bạn

Trả về danh sách đã giải nén.

Ví dụ

Đầu vào: nums = [1,2,3,4]
Đầu ra: [2,4,4,4]

Giải thích: Cặp đầu tiên [1,2] có nghĩa là chúng tôi có freq = 1 và val = 2 vì vậy chúng tôi tạo mảng [2].

cặp thứ hai [3,4] có nghĩa là chúng tôi có freq = 3 và val = 4 vì vậy chúng tôi tạo ra [4,4,4]. Cuối cùng nối [2] + [4,4,4] Là [2,4,4,4].

Dung dịch

def decompressRLElist(self, nums):
    return reduce(lambda a, b: a + b, [[nums[i + 1]] * nums[i] for i in range(0, len(nums), 2)])

5. Tài sản của khách hàng giàu nhất

bạn được cho một m x n lưới số nguyên accounts ở đâu accounts[i][j] là số tiền mà i​​​​​​​​​​​th​​​​ khách hàng có trong j​​​​​​​​​​​thngân hàng. Trở lại các sự giàu có mà khách hàng giàu nhất có.

của một khách hàng sự giàu có là số tiền họ có trong tất cả các tài khoản ngân hàng của họ. Khách hàng giàu có nhất là khách hàng có tối đa sự giàu có.

Ví dụ

Đầu vào: tài khoản = [[1,2,3],[3,2,1]]
Đầu ra: 6

Giải trình: 1st customer has wealth = 1 + 2 + 3 = 6 2nd customer has wealth = 3 + 2 + 1 = 6 Cả hai khách hàng đều được coi là giàu nhất với số tài sản là 6 mỗi người, vì vậy hãy trả lại 6.

Dung dịch

def maximumWealth(self, accounts):
    return max([sum(row) for row in accounts])

Phần kết luận

Tôi hy vọng các giải pháp trên là hữu ích. Bạn có thể kết hợp hiểu danh sách với các chức năng khác như bản đồ, lọc giảm để làm cho các giải pháp đơn giản và hiệu quả hơn.

Cảm Ơn Bạn 🤘

liên kết | Github



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status