Mô tả bài toán
Cho mảng nums. Phân chia thành hai mảng con left và right sao cho:
- Mọi phần tử trong
left<= mọi phần tử trongright. - Cả hai đều không rỗng.
leftcó kích thước nhỏ nhất có thể.
Trả về độ dài của left.
Ví dụ
Nếu nums = [5,0,3,8,6], đầu ra là 3 với left = [5,0,3], right = [8,6].
Giải thuật
- Khởi tạo
mx = None,temp = None,nmx = None,temp2 = 0. - Duyệt từng phần tử
itrongnums:- Nếu
mx is None: khởi tạomx = nmx = i,temp = temp2,temp2 += 1. - Nếu
i >= mx:temp2 += 1, cập nhậtnmxnếu cần. - Ngược lại:
temp = temp2,temp2 += 1,mx = nmx.
- Nếu
- Trả về
temp + 1.
Triển khai Python
def solve(nums):
mx = None
temp = None
nmx = None
temp2 = 0
for i in nums:
if mx is None:
mx = i
nmx = i
temp = temp2
temp2 += 1
continue
if i >= mx:
temp2 += 1
if i > nmx:
nmx = i
continue
else:
temp = temp2
temp2 += 1
mx = nmx
continue
return temp + 1
nums = [5, 0, 3, 8, 6]
print(solve(nums))
Đầu vào
[5,0,3,8,6]
Đầu ra
3