zoukankan      html  css  js  c++  java
  • hihocoder 1523:数组重排2

    题目链接

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

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

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

    输入

    第一行包含一个整数N。

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

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

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

    输出

    一个整数代表答案

    样例输入
    5
    2 3 1 4 5
    样例输出
    1

    想象一下把所有小的元素一次放到前面,必须从数组的尾部开始遍历,不然会乱。简化一下思路就是把最大的提出来放在最前面,然后把第二大的放在最前面,然后把第三大的放在最前面.....然后就好了。

    ac代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<vector>
     6 #include<iomanip>
     7 using namespace std;
     8 
     9 //1523:数组重排2
    10 const int maxn = 1e5 + 5;
    11 int main()
    12 {
    13     int n, a[maxn],pos[maxn];
    14     int res = 0;
    15     cin >> n;
    16     for (int i = 1;i <= n;i++)
    17     {
    18         cin >> a[i];
    19         pos[a[i]] = i;
    20     }
    21     int now = 0;
    22     for (int i = n;i >1;i--)
    23     {
    24         if (pos[i] < pos[i - 1])
    25         {
    26             pos[i-1] = now--;
    27             res++;
    28         }
    29         
    30     }
    31     cout << res << endl;
    32     return 0;
    33 }
  • 相关阅读:
    indexOf & lastIndexOf
    document.referrer
    函数组合
    v-model绑定vuex中的数据
    图片懒加载
    flex布局问题
    js常见错误类型
    es5/es6继承的区别
    合并两个有序数组
    lettcode 90 子集II
  • 原文地址:https://www.cnblogs.com/weedboy/p/7073219.html
Copyright © 2011-2022 走看看