📌  相关文章
📜  Python3程序检查是否可以在旋转后对数组进行排序

📅  最后修改于: 2022-05-13 01:55:48.515000             🧑  作者: Mango

Python3程序检查是否可以在旋转后对数组进行排序

给定一个大小为 N 的数组,任务是确定是否可以仅通过一次 shuffle 对数组进行排序。在一次 shuffle 中,我们可以将一些连续的元素从数组的末尾移动到数组的前面。
例如:

例子:

Input: arr[] = {1, 2, 3, 4} 
Output: Possible 
Since this array is already sorted hence no need for shuffle.

Input: arr[] = {6, 8, 1, 2, 5}
Output: Possible
Place last three elements at the front 
in the same order i.e. {1, 2, 5, 6, 8}

方法:

  1. 检查数组是否已经排序。如果是,则返回 true。
  2. 否则开始遍历数组元素,直到当前元素小于下一个元素。将该索引存储在 arr[i] > arr[i+1] 的位置。
  3. 从该点遍历并检查该索引中的元素是否按升序排列。
  4. 如果满足以上两个条件,则检查最后一个元素是否小于或等于给定数组的第一个元素。
  5. 如果满足以上三个条件,则打印“可能”,如果以上三个条件中的任何一个不满足,则打印“不可能”。

以下是上述方法的实现:

Python 3
# Python 3 implementation of 
# above approach
def is_sorted(a):
    all(a[i] <= a[i + 1] 
    for i in range(len(a) - 1))
      
# Function to check if 
# it is possible
def isPossible(a, n):
  
    # step 1
    if (is_sorted(a)) :
        print("Possible")
      
    else :
  
        # break where a[i] > a[i+1]
        flag = True
        for i in range(n - 1) :
            if (a[i] > a[i + 1]) :
                break
              
        # break point + 1
        i += 1
  
        # check whether the sequence is
        # further increasing or not
        for k in range(i, n - 1) :
            if (a[k] > a[k + 1]) :
                flag = False
                break
  
        # If not increasing after 
        # break point
        if (not flag):
            return False
  
        else :
  
            # last element <= First element
            if (a[n - 1] <= a[0]):
                return True
  
            else:
                return False
  
# Driver code
if __name__ == "__main__":
  
    arr = [ 3, 1, 2, 2, 3 ]
    n = len(arr)
  
    if (isPossible(arr, n)):
        print("Possible")
  
    else:
        print("Not Possible")
  
# This code is contributed
# by ChitraNayal


输出:
Possible

请参阅完整的文章检查是否可以在旋转后对数组进行排序以获取更多详细信息!