度度熊有一個N個數的數組,他想將數組從大到小排好序,但是萌萌的度度熊只會下面這個操作:
任取數組中的一個數然后將它放置在數組的最后一個位置。
問最少操作多少次可以使得數組從小到大有序?
輸入描述:
首先輸入一個正整數N,接下來的一行輸入N個整數。(N <= 50, 每個數的絕對值小於等於1000)
輸出描述:
輸出一個整數表示最少的操作次數。
輸入例子:
4 19 7 8 25
輸出例子:
2
這道題用map來實現,數組中的數為map的鍵值,它的初始位置為value。

#include<iostream> #include<map> #include<vector> #include<algorithm> using namespace std; int main() { int n,val; cin>>n; vector<int> arr; map<int,int> m; for(int i=0;i<n;i++) { cin>>val; arr.push_back(val); m[val]=i; } sort(arr.begin(),arr.end()); int index=n,count=0; for(int i=0;i<n-1;i++) { if (m[arr[i]]>m[arr[i+1]]) { m[arr[i+1]]=index++;//移動位置的不需要真的移動,只需要對應的value值為map中最大的值+1,這個值由index來維護。 count++; } } cout<<count<<endl; }
