这道题只能用快排那些时间复杂度低的排序吗
查看原帖
这道题只能用快排那些时间复杂度低的排序吗
1289975
shuiyuans楼主2024/3/5 16:05

冒泡这些就通过不了

#include <stdio.h>
#include <stdbool.h>
int main()
{
	int n,a[1000010];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=0;i<n-1;i++)
	{
	    for(int j=0;j<n-1-i;j++)
	    {
	        int t;
	        if(a[j]>a[j+1])
	        {
	            t=a[j+1];
	            a[j+1]=a[j];
	            a[j]=t;
	        }
	    }
	}
	int pre=0;
	int ans=0;
	for(int i=0;i<n;i++)
	{
	    if(a[i]==pre)
	    ans++;
	    else
	    {
	        ans=ans+(a[i]-pre)*6;
	        ans+=5;
	        ans++;
	        pre=a[i];
	    }
	    if(i==n-1)
	    ans=ans+a[i]*4;
	}
	printf("%d",ans);
}

下面我一开始写的没有排序的模拟也有两个超时间

#include <stdio.h>
int main()
{
	int n,a[300000];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	int ans=0;
	int now=0;
	int max=0;
	      for(int i=0;i<n;i++)
		{
			if(a[i]>max)
			{
				max=a[i];
			}
		}
	while(true)
	{
	    bool flag=true;
		for(int i=0;i<n;i++)
		{
			if(a[i]==now)
			{
				if(flag)
				ans+=5;
				flag=false;
				ans++;
			}
		}
		if(now==max)
		{
			ans=ans+now*4;
			break;
		}
		now++;
		ans+=6;
	}
	printf("%d",ans);
}
2024/3/5 16:05
加载中...