section1.2.1

本文深入探讨了使用快速排序算法处理数据集的方法,通过实例演示如何优化代码,避免常见的结构体比较错误,实现高效的数据交集处理。文章还讨论了用空间换时间的策略,并提出改进方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题呢,其实主要考察了排序和对数据的处理能力。排序用快排比较合适,然后呢将数据排好序后,就可以将数据进行处理,处理各数据间的交集,用数组保存起来。然而,中间有一次错误,即结构体的当前值和前一次的相比,而未与ss和ee的值相比,导致最后结果有误。代码如下。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n=0;
int ss[5555];
int ee[5555];
struct milk{
	int l;
	int r;
}m[5555];
void quicksort(int left,int right){
	int i, j, t, temp;
	if(left >= right){
		return;
	}
    temp = m[left].l; 
    i = left;
    j = right;
    while(i != j) {
    	while(m[j].l >= temp&&i<j)
    		j--;
    	while(m[i].l <= temp&&i<j)
    		i++;       
    	if(i <j)
    	{
    		t=m[i].l;
    		m[i].l=m[j].l;
    		m[j].l=t;
    		t=m[i].r;
    		m[i].r=m[j].r;
    		m[j].r=t;
    	}
    }
    m[left].l=m[i].l;
    m[i].l=temp;
    temp=m[left].r;
	m[left].r=m[i].r;
    m[i].r=temp;
    quicksort(left, i-1);
    quicksort(i+1, right);
}
int main (){
	freopen("milk2.in","r",stdin);
	freopen("milk2.out","w",stdout);
	cin>>n;
	int i=0,cnt=1;
	for (i=1;i<=n;i++){
		cin>>m[i].l>>m[i].r;
	}
	quicksort(1,n);
	ss[1]=m[1].l;
	ee[1]=m[1].r;
	for (i=2;i<=n;i++){
		if (m[i].r>ee[cnt]&&m[i].l>=ss[cnt]&&m[i].l<=ee[cnt]){
			ee[cnt]=m[i].r;
		}
		else if (m[i].l>ee[cnt]){
			cnt++;
			ee[cnt]=m[i].r;
			ss[cnt]=m[i].l;
		}
	}
	cout<<endl;
	int work=0,rest=0;
	for (i=1;i<=cnt;i++){
		if (ee[i]-ss[i]>work){
			work=ee[i]-ss[i];
		}
		if (ss[i+1]-ee[i]>rest){
			rest=ss[i+1]-ee[i];
		}
	}
	cout<<work<<" "<<rest<<endl;
}

然而,这样是用空间换时间,ss和ee数组其实只需用两个变量保存即可,用m1和m2来不断更新。以后会再写一次非数组保存的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值