排序题型

Posted area-h-p

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序题型相关的知识,希望对你有一定的参考价值。

题目如下

技术图片

 输入输出样例

技术图片

 

 由于给出的题目难度是不定序的,所以第一步要先对其从小到大排序,然后比较从头到尾两两做差,差值小于等于10的放入vector中,当vector的大小为3时则说明其满足一组题目,置空vector,当其差值大于10时,用3(每组应有的题目总数)减去vector的大小就得到本组题目还需要的题目数量。

 

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int func(int nu)
{
	vector<int> v, u;
	int a,res = 0;
	for(int i=0; i<nu; ++i)//得到题目难度序列
	{
		cin>>a;
		v.push_back(a);
	}
	::sort(v.begin(), v.end());//排序
	vector<int>::iterator it = v.begin();
	while(it != v.end())//这里由于内部循环也会对it指针进行更改,所以不可以用for的计数来设置循环次数
	{
		u.push_back(*it);
		while(u.size() < 3)//够一组题目停下
		{
			if(abs((*it-*(it+1))) <= 10)//这里用差值的绝对值,因为题目中并没有说难度不可以为负数(防止例如 -100 -(-1)= -99)
			{
				u.push_back(*(it+1));
				++it;
			}
			else//
			{
				++it;
				break;
			}
		}
		if(u.size() == 3)//当满一组题目时指针it还指向符合题意一组题目的尾部,举个例子,比如v = {1 2 3 4},当3被push_back进入u时,it仍然指向3,这时这个3是已经使用过的符合题目的数据,下一次循环不可再使用
			++it;
		res = res+(3-u.size());
		u.clear();
	}
	return res;
}

int main()
{
	int nu;
	cin>>nu;
	cout<<func(nu)<<endl;
	return 0;
}

 测试

技术图片

 

 

以上是关于排序题型的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode经典题型总结

排序题型

Java数据结构和算法:常用排序算法与经典题型

题型选择排序题(无领导)

二叉搜索树题型归纳

LeetCode JavaScript实现 合并链表 题型汇总