สมมติว่าเรามีอาร์เรย์ A ขนาด n ไม่เรียงลำดับ ต้องการหาสับอาร์เรย์ A[s..e] ที่สั้นที่สุด ซึ่งถ้าเรียงสับอาร์เรย์นี้แล้ว อาร์เรย์ทั้งหมดจะเรียงลำดับ
เช่น [2, 6, 4, 8, 10, 9, 15] ผลลัพธ์คือ 5 สับอาร์เรย์คือ [6, 4, 8, 10, 9]
ขั้นตอนการแก้ปัญหา
- สร้างอาร์เรย์
resโดยเรียงลำดับอาร์เรย์ต้นฉบับ - เปรียบเทียบแต่ละตำแหน่ง รวบรวมดัชนีที่ค่าต่างกัน
- ถ้าไม่มีความต่าง คืนค่า 0; ถ้ามี 1 ตำแหน่ง คืนค่า 1
- มิฉะนั้น คืนค่า
last_index - first_index + 1
ตัวอย่างโค้ด Python
class Solution:
def findUnsortedSubarray(self, nums):
res = sorted(nums)
r = []
for i in range(len(res)):
if nums[i] != res[i]:
r.append(i)
if not r:
return 0
if len(r) == 1:
return 1
return r[-1] - r[0] + 1
ob1 = Solution()
print(ob1.findUnsortedSubarray([2, 6, 4, 8, 10, 9, 15]))
อินพุต
[2, 6, 4, 8, 10, 9, 15]
เอาต์พุต
5