题意:当a[i]>a[j]并且a[i]<=a[j]+k时,可以将a[j]删除。求最终数列可能的最小长度。
思路:(贪心)将序列进行排序,从前往后遍历,满足这个条件即可删除。
证:因为对于ai-1,ai,ai+1三个排序好的数,如果ai能够把ai-1删除,则ai+1也能够把ai-1删除,换句话来说就是如果ai无法将ai-1删除的话,ai+1也无法将ai-1删除,只能留着。所以只要从前往后遍历两个数即可求得答案。
tips:有一个细节就是存在相同的数,我用map记录下所有数的出现次数,同时进行去重即可。
#include <iostream>
#include <map>
#include <algorithm>