HackerRank Almost Sorted
https://www.hackerrank.com/challenges/almost-sorted/problem
提出
8/25 test cases failed :(
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
import copy
#
# Complete the 'almostSorted' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#
def almostSorted(arr):
# Write your code here
# try swap
swap_index = -1, -1
swap_arr = copy.copy(arr)
for i in range(len(arr)-1):
if (swap_arri > swap_arri+1):
swap_index = i, i+1
break
swap_arr[swap_index0], swap_arr[swap_index1] = swap_arr[swap_index1], swap_arr[swap_index0]
check_swap_arr = sorted(swap_arr)
if (swap_arr == check_swap_arr):
print("yes")
print("swap", swap_index0 + 1, swap_index1 + 1)
exit()
# try reverse
reverse_index = -1, -1
reverse_arr = copy.copy(arr)
flag = True
for i in range(len(arr)-1):
if (flag):
if (reverse_arri > reverse_arri+1):
reverse_index = i, -1
for j in range(i+1, len(arr)):
if (reverse_arrj > reverse_arr[reverse_index0]):
reverse_index1 = j-1
flag = False
break
else:
pass
reverse_part_arr = reverse_arr[reverse_index0:reverse_index1+1]
reverse_arr = reverse_arr[:reverse_index0] + list(reversed(reverse_part_arr)) + reverse_arr[reverse_index1+1:]
reverse_check_arr = sorted(reverse_arr)
if (reverse_check_arr == reverse_arr):
print("yes")
print("reverse", reverse_index0 + 1, reverse_index1 + 1)
exit()
print("no")
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
almostSorted(arr)
解答
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
from copy import *
#
# Complete the 'almostSorted' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#
def almostSorted(arr):
# Write your code here
sortarr = deepcopy(arr)
sortarr.sort()
# if the array is already sorted
if sortarr == arr:
print("yes")
return
# if the array can be sorted
l = r = -1
# left index
for i in range(n-1):
if arri > arri+1:
l = i
break
# right index
for i in range(n-1, 0, -1):
if arri < arri-1:
r = i
break
# check for swap
temp = deepcopy(arr)
# swap
templ, tempr = tempr, templ
if temp == sortarr:
print("yes")
print("swap", l+1, r+1)
return
# check for reverse
temp = deepcopy(arr)
# reverse
temp = temp:l + templ:r+1::-1 + tempr+1:
if temp == sortarr:
print("yes")
print("reverse", l+1, r+1)
return
# arra can't be sorted
print("no")
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
almostSorted(arr)
メモ
https://www.youtube.com/watch?v=SyVUe7h4zho