应该是牛客的一道题😥

思路是排序后使用滑动窗口

#include<vector>
#include<iostream>
#include<algorithm>
#include<numeric>
#include<queue>
using namespace std;
vector<vector<int>> re;
int main()
{
	int n,k;
	cin >> n;cin >> k;
	for (int i = 0; i < n; i++)
	{
		int x, y;
		vector<int>  temp;
		cin >> x;cin >> y;
		temp.push_back(x);
		temp.push_back(y);
		re.push_back(temp);
	}
  if (n == 1)
  {
	  return re[0][1];
  }

  sort(re.begin(), re.end(), [](vector<int> p1,vector<int> p2) {
	  return p1[0] < p2[0];
	  });
  for (auto& ele : re)
  {
	  cout << ele[0] <<" "<< ele[1] << endl;
  }
  string jilu = "5 3 1 3 2 1 5 2 3 1 4 3";

  //使用滑动窗口收集最大值
  int i = 0;
  int j = 0;
  int maxvalue=0;
  int sum = 0;
  while (j < re.size())
  {
	  if ((re[j][0] - re[i][0])<k)
	  {
		  sum += re[j][1];
		  ++j;
	  }
	  else
	  {
		  if (sum > maxvalue)
			  maxvalue = sum;
		  sum -= re[i][1];//加i之前要去掉i原来指向的值
		  ++i;
	  }
  }

  if (j == re.size() || (re[j][0] - re[i][0]) < k)	//注意如果是因为越界退出要防止少收集一段
  {
	  if (sum > maxvalue)
		  maxvalue = sum;
  }


  return maxvalue;

}

全部评论

相关推荐

Cherrycola01:0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务