檢查反轉子陣列是否使 Python 中的陣列排序
假設我們有一個名為 nums 的陣列,其中包含唯一元素。我們必須檢查在反轉其一個子陣列後,陣列是否將被排序。如果陣列已經排序,則也返回 True。
因此,如果輸入類似於 nums = [4,6,27,25,15,9,37,42],則輸出將為 True,因為如果我們反轉 [9,15,25,27],則陣列將被排序。
為了解決這個問題,我們將遵循以下步驟 -
- n := nums 的大小
- 如果陣列只有一個元素,則返回 True
- i := 1
- 對於 i 的範圍從 1 到 n - 1,執行以下操作
- 如果 nums[i - 1] < nums[i],則
- 如果 i 與 n 相同,則返回 true,否則退出迴圈
- 如果 nums[i - 1] < nums[i],則
- j := i
- 當 j < n 且 nums[j] < nums[j - 1] 時,執行以下操作
- 如果 i > 1 且 nums[j] < nums[i - 2],則返回 false
- j := j + 1
- 如果 j 與 n 相同,則返回 True
- k := j
- 如果 nums[k] < nums[i - 1],則返回 False
- 當 k > 1 且 k < n 時,執行以下操作
- 如果 nums[k] < nums[k - 1],則返回 False
- k := k + 1
- 返回 True
讓我們檢視以下實現以更好地理解 -
示例程式碼
def solve(nums): n = len(nums) if n == 1: return True i = 1 for i in range(1, n): if nums[i - 1] < nums[i] : if i == n: return True else: break j = i while j < n and nums[j] < nums[j - 1]: if i > 1 and nums[j] < nums[i - 2]: return False j += 1 if j == n: return True k = j if nums[k] < nums[i - 1]: return False while k > 1 and k < n: if nums[k] < nums[k - 1]: return False k += 1 return True nums = [4,6,27,25,15,9,37,42] print(solve(nums))
輸入
[4,6,27,25,15,9,37,42]
輸出
True
廣告