B1067 Sort with Swap(0, i) (贪心)

B1067 Sort with Swap(0, i) (25分)

没调整完毕时,首位是0时,就把0和后面的没归位的第一位数字换,
首位不是0时,就把0和0所在位置的数去交换
每交换一次,步数加1

  • 正解:
    a[0]=0的时候,需要从头往后找第一个a[i]!=i的时候,重复了许多次从头往后找的操作,因为前一次已经能保证,到该数之前的都是a[i]=i了。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string.h>
#include <cmath>
#include <math.h>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#define lowbit(i)((i)&(-i))
using namespace std;
typedef long long ll;
const int MAX=100001;
const int INF=0x3f3f3f3f;
const int MOD=1000000007;
const int SQR=633;
int main()
{
    int a[MAX];
    int n,m=0;
    scanf("%d",&n);
    int left=n-1;//存放除0以外的不在自己位上的个数
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        a[x]=i;
        if(x==i&&x!=0)
            left--;
    }
    int i=1;
    while(left>0)
    {
    if(a[0]==0)//起始位置是否是0
    {
        while(i<n)
        {
            if(a[i]!=i)
            {
                swap(a[0],a[i]);
                m++;
                break;
            }
            i++;
        }
    }
    while(a[0]!=0)
    {
        swap(a[0],a[a[0]]);
        m++;
        left--;
    }
    }
    printf("%d\n",m);
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • #引入所需要的包paddle为PaddlePaddle包,numpy为数学计算包,支持大量的维度数组与矩阵运算,此...
    码农豆豆在简书阅读 953评论 0 0
  • 每日检视86/365 起床:8:00 就寝:11:30 天气:晴 心情:平静 纪念日: 叫我起床的不是闹钟是梦想 ...
    洒脱转身阅读 174评论 0 0
  • ​ 很多人都明白人生是场马拉松,很多人都认为是百米冲刺。所谓不要让孩子输在起跑线,本人觉得很不靠谱。 ...
    十尾狸阅读 153评论 0 4
  • 清晨,小鸟的啁啾声打破山林的寂静,也唤醒林中小屋沉睡的伙伴们。我们来不及洗漱,迅速穿衣,出门。这个节奏就为一个约定...
    乡语阅读 429评论 5 2
  • 儿子说要是小蚂蚁,就可以在里面游泳了,但对我们来说,只是西瓜汁
    夫子书社阅读 338评论 1 1