数组重排(贪心)

来源:互联网 发布:视频亮度调节软件 编辑:程序博客网 时间:2024/06/05 16:30

给定一个1-N的排列A1, A2, ... AN,每次操作小Hi可以选择一个数,把它放到数组的最左边。

请计算小Hi最少进行几次操作就能使得新数组是递增排列的。

Input

第一行包含一个整数N。

第二行包含N个两两不同整数A1, A2, ... AN。(1 <= Ai <= N)

对于60%的数据 1 <= N <= 20

对于100%的数据 1 <= N <= 100000

Output

一个整数代表答案

Sample Input
52 3 1 4 5
Sample Output
1

利用贪心思想,如果每个数都移动,N个数最多移动N次就形成一个递增序列;如果最后一个数是最大的就不需要移动,第N-1个是倒数第二大的也不需要动,只有当第i个数不是i时才移动;


#include <iostream>#include <queue>#include <vector>#include <stdio.h>#include <algorithm>using namespace std;vector<int> vec;int main(){    int N;    cin >> N;    int maxx=N;    int x;    for(int i=0; i<N; i++){        scanf("%d",&x);        vec.push_back(x);    }    for(int i=N-1; i>=0; i--){        if(vec[i]==maxx){            //不需要移动,maxx-1;            maxx--;        }    }    cout << maxx << endl;    return 0;}