檢查反轉子陣列是否使 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,否則退出迴圈
  • 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

更新於: 2021年1月15日

253 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告