leetcode第354场周赛 2 - 双指针

发布时间 2023-07-24 23:35:01作者: Qiansui

题目传送门

2779. 数组的最大美丽值

题意
给你一个数组和一个整数 k,数组里面每个数都只能操作一次:加上区间\([-k,k]\)里的数。问你最终由相等元素组成的最长子序列的长度
双指针的妙用!

思路
先排序,前后双指针取差值在2k之间的区间,此区间的所有数均可以操作为同一个数,ans统计最大值即为最终答案

代码

class Solution {
public:
	int maximumBeauty(vector<int>& a, int k) {
		sort(a.begin() , a.end());
		int ans = 1 , n = a.size();
		k <<= 1;
		for(int i = 0, j = 0; i < n; ++ i){
			while(a[i] > a[j] + k) ++ j;
			ans = max(ans, i - j + 1);
		}
		return ans;
	}
};