1067 Sort with Swap(0, i)

在这里插入图片描述
在这里插入图片描述

idea

给出内容为0~n-1的序列,只能用0和其他数字交换的前提下把序列变为递增数列。
用0换且希望次数最少
==> 0不在0号位时,0和所在位置对应的数值进行交换;0在0号位时,要和不在本位上的数进行交换,而非已经在本位上的数值。
==>若不在0号位,找到首个不在本位上的数值进行交换;
只要0不在本位上,和位置对应的数进行交换即可
其中,存储数值间的映射关系,可利用数组下标存放数,数组内容存放位置

solution1(部分测试点超时)

没有利用好键值的映射关系,每次都要O(n)找到位置

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5 + 10;
int a[maxn];
int main(){
   
	int n, p1, p2, flag = 1, ans = 0;
	scanf("%d", &n);
	for(int i = 0; i < n; i++){
   
		scanf("%d", a + i);
		if(!a[i]) p1 = i;
	}
	while(flag){
   
		p2 = -1;
		if(p1){
   
			for(int i = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值