zoukankan      html  css  js  c++  java
  • A1067 Sort with Swap(0, i) [贪心]

    在这里插入图片描述
    题目大意:给一串从0到n-1的数字无序,要求只能换0求最短的交换次数
    思路:

    1. 贪心思想,先记录每个数字的位置,(有点绕)不在正确位置上的数字个数。
    2. 然后如果0不在开头,就把0占有的位置上应有的数字找出来和它交换。
    3. 如果0在开头,找一个不在应有位置上的数字交换,再进行第二步。
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<string>
    using namespace std;
    int a[100001];
    int main()
    {
    	int n,num;
    	cin >> n; 
    	int invalid = n - 1, count = 0;
    	for (int i = 0; i < n; i++)
    	{
    		scanf("%d", &num);
    		a[num] = i;
    		if (num == i && num != 0)
    			invalid--;	
    	}
    	int k = 1;
    	while (invalid > 0)
    	{
    		if (a[0] == 0)
    		{
    			while (k < n)
    			{
    				if (a[k] != k)
    				{
    					swap(a[0], a[k]);
    					count++;
    					break;
    				}
    				k++;
    			}
    		}
    		while (a[0] != 0)
    		{
    			swap(a[0],a[a[0]]);
    			count++;
    			invalid--;
    		}
    	}
    	printf("%d
    ", count);
    	return 0;
    }
    
  • 相关阅读:
    Neo4j简介
    HiBench算法简介
    Spark性能测试工具
    常用Benchmark
    Mapreduce的性能调优
    YARN node labels
    Yarn on Docker集群方案
    YARN on Docker
    HDP YARN MapReduce参数调优建议
    JVM优化:生产环境参数实例及分析
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13812068.html
Copyright © 2011-2022 走看看