สมมติว่าเรามีรายการตัวเลขชื่อ nums เราต้องการหาความยาวของสับลิสต์ที่สั้นที่สุดใน nums ซึ่งถ้าเรียงสับลิสต์นั้น แล้วอาร์เรย์ทั้งหมด nums จะถูกเรียงในลำดับเพิ่มขึ้น
ตัวอย่าง
หากอินพุตคือ nums = [1,2,5,4,9,10] ผลลัพธ์จะเป็น 2 เนื่องจากการเรียงสับลิสต์ [5, 4] จะได้ [1, 2, 4, 5, 9, 10]
ขั้นตอนการแก้ปัญหา
f:= -1,l:= -1lst:= เรียงลำดับรายการnums- ลูป
iจาก 0 ถึงขนาดของnums:- ถ้า
nums[i]ไม่เท่ากับlst[i]:- ถ้า
fเป็น -1 ให้f := i - อื่นๆ ให้
l := i
- ถ้า
- ถ้า
- ถ้า
lเป็น -1 และfเป็น -1 ให้คืนค่า 0 - คืนค่า
l - f + 1
การใช้งาน
class Solution:
def solve(self, nums):
f = -1
l = -1
lst = sorted(nums)
for i in range(len(nums)):
if nums[i] != lst[i]:
if f == -1:
f = i
else:
l = i
if l == -1 and f == -1:
return 0
return l - f + 1
ob = Solution()
print(ob.solve([1,2,5,4,9,10]))
อินพุต
[1,2,5,4,9,10]
เอาต์พุต
2