Menu
CoddyTech

4Sum

Bạn nhận được một danh sách (list) số nguyên (integer) nums và một số nguyên target. Hãy trả về mọi bộ bốn [a, b, c, d] sao cho bốn giá trị của chúng nằm ở bốn vị trí khác nhau trong nums và có tổng bằng target. Viết các giá trị trong mỗi bộ bốn theo thứ tự không giảm. Nếu có thể chọn cùng bốn giá trị từ những vị trí khác nhau, bộ bốn đó vẫn chỉ xuất hiện một lần. Sắp xếp kết quả theo giá trị thứ nhất, rồi đến giá trị thứ hai, rồi đến giá trị thứ ba. Nếu không có bộ bốn nào thỏa mãn, hãy trả về một danh sách rỗng.

Hàm

fourSum(nums: integer-array, target: integer) → integer-2d-array
numsinteger-array
các số để chọn, ít nhất một số
targetinteger
tổng mà mỗi bộ bốn phần tử phải đạt được
Trả vềinteger-2d-array
các bộ bốn phần tử phân biệt có tổng bằng target, mỗi bộ đều được sắp xếp, danh sách cũng được sắp xếp; một danh sách rỗng nếu không có bộ nào

Ràng buộc

  • 1 ≤ nums.length ≤ 200
  • -108 ≤ nums[i] ≤ 108
  • -109 ≤ target ≤ 109
  • Tổng của bất kỳ bốn giá trị nào nằm trong khoảng từ -4 × 108 đến 4 × 108, nên có thể lưu trong một số nguyên 32 bit.
  • Các bộ bốn chứa cùng bốn giá trị được tính là một.

Ví dụ

Đầu vào
nums = [3, -1, 0, 2, -2, 1, -3]target = 1
Đầu ra
[[-3, -1, 2, 3], [-3, 0, 1, 3], [-2, -1, 1, 3], [-2, 0, 1, 2]]
Giải thích
Mỗi bộ bốn số đều có tổng bằng 1, ví dụ -3 + (-1) + 2 + 3. Hai bộ bắt đầu bằng -3 đứng trước, được sắp xếp theo giá trị thứ hai: -1 trước 0.
challenge icon

Câu hỏi mở rộng

Đếm số nhóm gồm bốn vị trí có tổng giá trị bằng target, thay vì đếm các bộ bốn giá trị phân biệt. Ví dụ thứ hai có 15 nhóm. Bạn có thể giải bài này trong O(n²) không?

Đặt lại code
def fourSum(nums, target):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

nums = [3, -1, 0, 2, -2, 1, -3]
target = 1

Đầu ra mong đợi

[[-3, -1, 2, 3], [-3, 0, 1, 3], [-2, -1, 1, 3], [-2, 0, 1, 2]]