首页 > 其他 > 详细

PTA 1067 Sort with Swap(0, i) (贪心)

时间:2019-11-17 00:23:51      阅读:88      评论:0      收藏:0      [点我收藏+]

题目链接:1067 Sort with Swap(0, i) (25 分)

技术分享图片

题意

给定长度为 \(n\) 的排列,如果每次只能把某个数和第 \(0\) 个数交换,那么要使排列是升序的最少需要交换几次。

思路

贪心

由于是排列,所以排序后第 \(i\) 个位置上的数就是 \(i\)。所以当 \(a[0] \neq 0\) 时,把 \(a[0]\) 位置上的元素交换到相应位置。如果 \(a[0] = 0\),就找到第一个不在正确位置上的数,把它与第 \(0\) 个数交换,那么下一次又是第一种情况了,也就是下一次交换可以换到正确的位置。

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;

int arr[maxn];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }

    int c = 0, cnt = 0;
    while (c < n) {
        if (arr[0] != 0) {
            swap(arr[0], arr[arr[0]]);
            cnt++;
        } else {
            for (; c < n && arr[c] == c; ++c);
            if (c == n) break;
            swap(arr[0], arr[c]);
            cnt++;
        }
    }
    cout << cnt << endl;
    return 0;
}

PTA 1067 Sort with Swap(0, i) (贪心)

原文:https://www.cnblogs.com/wulitaotao/p/11874633.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!