百度--有趣的排序


度度熊有一個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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM