Skip to content

Instantly share code, notes, and snippets.

@inspirit941
Created July 12, 2025 01:46
Show Gist options
  • Save inspirit941/bf4a3906f4aa4d6d183e2f70a3ff8e1f to your computer and use it in GitHub Desktop.
Save inspirit941/bf4a3906f4aa4d6d183e2f70a3ff8e1f to your computer and use it in GitHub Desktop.
#!/bin/python3
import math
import os
import random
import re
import sys
#
# Complete the 'almostSorted' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#
def is_sorted(arr):
return all(arr[i] <= arr[i+1] for i in range(len(arr)-1))
def almostSorted(arr):
# Write your code here
# check swap
swap_l, swap_r = -1, -1
for i in range(1, len(arr)):
if arr[i-1] > arr[i]:
swap_l = i-1
break
for i in range(swap_l+1, len(arr)):
if i == len(arr)-1 or arr[i+1] > arr[swap_l]:
swap_r = i
# print(arr, arr[swap_l], arr[swap_r])
arr[swap_l], arr[swap_r] = arr[swap_r], arr[swap_l]
# print(arr)
break
if is_sorted(arr):
print("yes")
print("swap", swap_l+1, swap_r+1)
return
# check reverse
arr[swap_l], arr[swap_r] = arr[swap_r], arr[swap_l]
# print("restore", arr)
rev_l, rev_r = -1, -1
for i in range(len(arr)-1):
if rev_l == -1 and arr[i] > arr[i+1]:
rev_l = i
elif rev_l != -1 and arr[i] < arr[i+1]:
rev_r = i
break
# print(rev_l, rev_r, arr)
rev_sub = arr[rev_l: rev_r+1]
# print(rev_sub)
arr = arr[:rev_l] + rev_sub[::-1] + arr[rev_r+1:]
# print(arr)
if is_sorted(arr):
print("yes")
print("reverse", rev_l+1, rev_r+1)
return
print("no")
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
almostSorted(arr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment