238. Product of Array Except Self

  • Tags: Mảng, Tổng tiền tố
  • Độ khó: Trung bình

Tóm tắt đề bài

Mô tả: Cho một mảng số nguyên .

Yêu cầu: Trả về một mảng , trong đó bằng tích của tất cả các phần tử trong mảng ngoại trừ .

Giới hạn:

  • Dữ liệu đảm bảo tích của tất cả các phần tử tiền tố và hậu tố của mảng đều nằm trong phạm vi số nguyên 32 bit.
  • Không được sử dụng phép chia và giải quyết vấn đề trong thời gian .
  • Nâng cao: Giải quyết vấn đề trong không gian phụ .
  • .
  • .

Ví dụ:

  • Ví dụ 1:
Input: nums = [1,2,3,4]
Output: [24,12,8,6]
  • Ví dụ 2:
Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]

Ý tưởng giải quyết

Ý tưởng 1: Duyệt mảng hai lần

  1. Tạo một mảng có cùng độ dài với mảng .
  2. Duyệt mảng từ trái sang phải, tính tích của các phần tử bên trái và lưu vào mảng .
  3. Duyệt mảng từ phải sang trái, tính tích của các phần tử bên phải và nhân với giá trị ban đầu của để có kết quả cuối cùng.

Ý tưởng 1: Cài đặt

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)
        res = [1] * n
 
        left = 1
        for i in range(n):
            res[i] *= left
            left *= nums[i]
 
        right = 1
        for i in range(n-1, -1, -1):
            res[i] *= right
            right *= nums[i]
        return res

Ý tưởng 1: Phân tích độ phức tạp

  • Độ phức tạp thời gian: .
  • Độ phức tạp không gian: .