Hãy tưởng tượng bạn có một hàm, với danh sách n số nguyên có thể cho bạn biết liệu chúng có phải là một khối hợp lệ hay không.
Hãy tưởng tượng bạn đã sửa đổi chức năng này để thay vào đó đếm số lượng khối phụ hợp lệ, vì vậy [1 3 2 4] sẽ tìm [1 3 2 4], [1 3 2], [3 2 4 ], [3 2].
Để thực hiện thay đổi đó, bạn sẽ chỉ lặp qua tất cả các khối tiểu có thể, chuyển chúng tới các chức năng ban đầu cho đến khi bạn vừa 2 con số:
1,3,2,4 is valid
1,3,2 is valid
1,3 is NOT valid
3,2,4 is valid
3,2 is valid
There were 4 valid sub blocks
Chức năng đầu tiên sau đó:
def isValid(li):
return (max(li)-min(li) == len(li)-1)
Tức là tất cả các giá trị khác nhau, giá trị lớn nhất trừ đi giá trị nhỏ nhất sẽ cho độ dài của mảng trừ đi 1. Đối với [1 3 2 4], lớn nhất = 4, nhỏ nhất = 1, max-min = 3, length-1 = 3, hoàn thành công việc.
Chức năng kiểm tra chính:
def countValidSubs(li):
count = 0
length = len(li)
for start in range(0,length-2):
for newlen in range(length-start,1,-1):
newli = li[start:start+newlen]
if isValid(newli):
print(','.join(`i` for i in newli)+" is valid")
count += 1
else:
print(','.join(`i` for i in newli)+" is NOT valid")
return count
Sau đó, chỉ cần gọi như:
countValidSubs([1, 3, 2, 4, 5, 7, 9, 8, 6])
(trả lời có 14, bằng cách này)
Vấn đề duy nhất với điều này như một bài tập về nhà câu trả lời là nó là O (n /2)
Tôi không thấy một dấu hỏi bất cứ nơi nào. – GManNickG
Nghe như bài tập về nhà với tôi. –
ở đó. được thêm cho bạn –