B. Uniqueness(有难度的思维题+数组分割)

在这里插入图片描述
题意:就是选一段连续的子区间[l,r]使得删除这段区间之后,剩余元素没有重复的,求最短的子区间;
我刚开始这个题是这样想的:
先从左往右找第一个重复的然后停止,再从右往左找重复的然后停止,最后r-l+1;但是案例10,始终过不了,之后我的同学给我举了一个例子来证明我的想法是错的:
比如:
在这里插入图片描述
如果按照我的想法去写那么就是4,但是很明显删除2,3只需要两个元素,答案为2,那么我的想法就错了;
所以需要分段去找,意思就是:
在这里插入图片描述
那么就应该这样去分段找,找到不用删除的最大值,最后用n-ans,就是答案了;注意:这里需要用map或者set来标记;
通过这样就能求解了;唉,我开头不知道自己错哪里了QAQ;

#include<bits/stdc++.h>
using namespace std;
map<int,int> mm;
const int INF=0x3f3f3f3f;
int main(){
	int n,a[2019];
	scanf("%d",&n);
	for(int i=0;i<n;i++)scanf("%d",a+i);//输入
    int ans=-1;
    for(int i=-1;i<n;i++){//这里i为-1,是因为要满足这个条件也许是[0,x]区间最短;
    	mm.clear();
    	int num=0;
    	for(int j=0;j<=i;j++){//左边
    		  if(!mm[a[j]])mm[a[j]]=1,num++;
    		  else break;
		}
		for(int j=n-1;j>i;j--){//右边
			   if(!mm[a[j]])mm[a[j]]=1,num++;
    		  else break;
		}
		ans=max(ans,num);//不断更新答案
	}
	printf("%d\n",n-ans);
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化以下代码: FileMatrixVo fileMatrixVo = new FileMatrixVo(); fileMatrixVo.setId(tableName + "-" + columnName); fileMatrixVo.setCoherenceFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.ENUMERATION_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setEffectiveFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.REGEXP_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setCompleteFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.NULL_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setUniquenessFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.UNIQUENESS_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setMultiTableConsistency(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.MULTI_TABLE_ACCURACY.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setFieldLengthFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.FIELD_LENGTH_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList())); fileMatrixVo.setTimelinessFiles(errorOutputFiles.stream().filter(errorOutputFileVo -> RuleTemplateName.TIMELINESS_CHECK.getId().equals(errorOutputFileVo.getRuleTemplateId())).collect(Collectors.toList()));
最新发布
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值