Mô tả bài toán
Cho danh sách nums các số khác nhau. Đảo chỗ toàn cục (global inversion): cặp i < j mà nums[i] > nums[j]. Đảo chỗ cục bộ (local inversion): cặp i, i+1 mà nums[i] > nums[i+1]. Kiểm tra xem số lượng đảo chỗ toàn cục có bằng số lượng đảo chỗ cục bộ hay không.
Ví dụ: nums = [3,2,4] → True (chỉ có cặp (0,1) là cả toàn cục và cục bộ).
Giải thuật (Kiểm tra điều kiện cần đủ)
- Nếu tồn tại cặp
i, jvớij >= i+2mànums[i] > nums[j]thì số đảo chỗ toàn cục > cục bộ → trả vềFalse. - Duyệt
itừ 0 đếnl-3,jtừi+2đếnl-1: nếunums[i] > nums[j]trả vềFalse. - Trả về
True.
Ví dụ mã Python
class Solution:
def solve(self, nums):
l = len(nums)
for i in range(l - 2):
for j in range(i + 2, l):
if nums[i] > nums[j]:
return False
return True
ob = Solution()
nums = [3, 2, 4]
print(ob.solve(nums))
Đầu vào
[3, 2, 4]
Đầu ra
True