百度校招笔试-有趣的排序

度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?
输入描述:
首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)

输出描述:
输出一个整数表示最少的操作次数。

输入例子1:
4
19 7 8 25

输出例子1:
2

分析:乍一看没有思路,但是题目的要求需要将其从小到大进行排列,就需要最后变成 从小到大的顺序,
例如 19 7 8 25,
最后的顺序为 7 8 19 25;

所以顺序的7 8 是不用变化的,变化的是19 25 ,需要移动两次。

例如 3 10 1 8 7 2;输入中只有一个可以排成的顺序:1,2 所以依次移动3,7,8,10 一共需要4次。

所以这个题目的关键就变成了找出数组中的拥有从大到小顺序的数组的数量,剩下的数就需要进行移动排序。

代码:

#include<iostream>
#include<string>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int a[50];
    int b[50];
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        b[i] = a[i];
    }
    sort(b,b+n);
    int flag=0;
    int j = 0;
    for (int i = 0; i < n; i++)
    {
        if (a[i] == b[j])
        {
            flag++;
            j++;
        }
    }
    cout << n - flag<<endl;
    return 0;
}
添加笔记

猜你喜欢

转载自blog.csdn.net/zxc641483573/article/details/78640653