• PAT Advanced 1067 Sort with Swap(0, i) (25分)


    Given any permutation of the numbers {0, 1, 2,..., N1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the following way:

    Swap(0, 1) => {4, 1, 2, 0, 3}
    Swap(0, 3) => {4, 1, 2, 3, 0}
    Swap(0, 4) => {0, 1, 2, 3, 4}
    
     

    Now you are asked to find the minimum number of swaps need to sort the given permutation of the first N nonnegative integers.

    Input Specification:

    Each input file contains one test case, which gives a positive N (≤) followed by a permutation sequence of {0, 1, ..., N1}. All the numbers in a line are separated by a space.

    Output Specification:

    For each case, simply print in a line the minimum number of swaps need to sort the given permutation.

    Sample Input:

    10
    3 5 7 2 6 4 9 0 8 1
    
     

    Sample Output:

    9
    
     

    依旧采用柳神的办法(好精巧,不知道怎么想到的),柳太强了。

    0号哨兵。第一位开始遍历,如果不与该位置相等,0号一直调整到相应位置,自己和0号位置交换。

    #include <iostream>
    #include <map>
    #include <algorithm>
    using namespace std;
    int main() {
        int N, cnt = 0, tmp;
        scanf("%d", &N);
        map<int, int> m;
        for(int i = 0; i < N; i++){
            scanf("%d", &tmp);
            m[tmp] = i;
        }
        for(int i = 1; i < N; i++) {
            if(i != m[i]) {
                while(m[0] != 0) {
                    swap(m[0], m[m[0]]);
                    cnt++;
                }
                if(i != m[i]) {
                    swap(m[0], m[i]);
                    cnt++;
                }
            }
        }
        cout << cnt;
        system("pause");
        return 0;
    }
  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/littlepage/p/12268544.html
Copyright © 2020-2023  润新知