度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?
输入描述:
首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)
输出描述:
输出一个整数表示最少的操作次数。
输入例子1:
4 19 7 8 25
排序所需最小操作次数,可以先排序再求答案。
先建一个hashmap,记录原数组各个数值的索引,然后排序。遍历排序后的数组,如果发现前面一个数的索引比后面一个的大,说明在原数组中他们的位置不是从小到大的,应该将后面的数插到整个数组的最后,更新索引值,算一次操作,循环遍历排序后的数组即可得到总的操作次数。
def main():
n = int(input())
nums = list(map(int, input().split(' ')))
nums_dict = {}
for i in range(n):
nums_dict[nums[i]] = i
nums.sort()
count = 0
index = n
for i in range(n-1):
if nums_dict[nums[i]] > nums_dict[nums[i+1]]:
nums_dict[nums[i+1]] = index
index += 1
count += 1
print(count)
return
main()