【单调队列】LeetCode1499:满足不等式的最大值

这篇具有很好参考价值的文章主要介绍了【单调队列】LeetCode1499:满足不等式的最大值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

涉及知识点

单调队列

题目

给你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标 x 的值从小到大排序。也就是说 points[i] = [xi, yi] ,并且在 1 <= i < j <= points.length 的前提下, xi < xj 总成立。
请你找出 yi + yj + |xi - xj| 的 最大值,其中 |xi - xj| <= k 且 1 <= i < j <= points.length。
题目测试数据保证至少存在一对能够满足 |xi - xj| <= k 的点。
示例 1:
输入:points = [[1,3],[2,0],[5,10],[6,-10]], k = 1
输出:4
解释:前两个点满足 |xi - xj| <= 1 ,代入方程计算,则得到值 3 + 0 + |1 - 2| = 4 。第三个和第四个点也满足条件,得到值 10 + -10 + |5 - 6| = 1 。
没有其他满足条件的点,所以返回 4 和 1 中最大的那个。
示例 2:
输入:points = [[0,0],[3,0],[9,2]], k = 3
输出:3
解释:只有前两个点满足 |xi - xj| <= 3 ,代入方程后得到值 0 + 0 + |0 - 3| = 3 。
提示:
2 <= points.length <= 105
points[i].length == 2
-108 <= points[i][0], points[i][1] <= 108
0 <= k <= 2 * 108
对于所有的1 <= i < j <= points.length ,points[i][0] < points[j][0] 都成立。也就是说,xi 是严格递增的。

单调队列

枚举j,计算i。我们只考虑i<j的情况。(i,j)和(j,i)本质是一样的。
由于x是升序,所以xi <= xj,也就是:yi+yj+|xi-xj| 等于yi+yj+xj-xi ,xj+yj合并 yi-xi合并,简称subi。
将xi和yi-xi放到双向队列中。
淘汰以下数据:
一,xj-xi >k,从队首淘汰。
二,i1 <i2,且subi1< subi2。如果j能选择i1,则必定能选择i2。subi大则yi+yj+xj-xi大。从队尾淘汰i1。

代码

核心代码

class Solution {
public:
	int findMaxValueOfEquation(vector<vector<int>>& points, int k) {
		m_c = points.size();
		deque<pair<int, int>> mXSub;
		int iRet = INT_MIN;
		for (int i = 0; i < m_c; i++)
		{
			while (mXSub.size() && (points[i][0] - mXSub.front().first > k))
			{
				mXSub.pop_front();
			}
			if (mXSub.size())
			{
				iRet = max(iRet, mXSub.front().second + points[i][0] + points[i][1]);
			}
			while (mXSub.size() && (mXSub.back().second <= points[i][1] - points[i][0]))
			{
				mXSub.pop_back();
			}
			mXSub.emplace_back(points[i][0], points[i][1] - points[i][0]);
		}
		return iRet;
	}
	int m_c;
};

测试用例

template<class T>
void Assert(const T& t1, const T& t2)
{
	assert(t1 == t2);
}

template<class T>
void Assert(const vector<T>& v1, const vector<T>& v2)
{
	if (v1.size() != v2.size())
	{
		assert(false);
		return;
	}
	for (int i = 0; i < v1.size(); i++)
	{
		Assert(v1[i], v2[i]);
	}
}


int main()
{
	vector<vector<int>> points;
	int k;
	{
		Solution sln;
		points = { {1,3},{2,0},{5,10},{6,-10} }, k = 1;
		auto res = sln.findMaxValueOfEquation(points, k);
		Assert(4, res);
	}
	{
		Solution sln;
		points = { {0,0},{3,0},{9,2} }, k = 3;
		auto res = sln.findMaxValueOfEquation(points, k);
		Assert(3, res);
	}

//CConsole::Out(res);
}

2023年3月旧代码

 class Solution {
 public:
	 int findMaxValueOfEquation(vector<vector<int>>& points, int k) {
		 m_c = points.size();
		 std::map<int,std::set<int>> mYSubXToX,mXToYSubX;
		 int iMax = INT_MIN;
		 for (int i = 0; i < m_c; i++ )
		 {
			 const vector<int>& pt = points[i];
			 //删除x的差的绝对值大于k
			 while (mXToYSubX.size() && ((mXToYSubX.begin()->first + k) < pt[0]))
			 {
				 for (const auto& ySubX : mXToYSubX.begin()->second)
				 {
					 mYSubXToX[ySubX].erase(mXToYSubX.begin()->first);
					 if (mYSubXToX[ySubX].empty())
					 {
						 mYSubXToX.erase(ySubX);
					 }
				 }
				 mXToYSubX.erase(mXToYSubX.begin());
			 }
			 if (mYSubXToX.size())
			 {
				 iMax = max(iMax, mYSubXToX.rbegin()->first + pt[0] + pt[1]);
			 }
			 const int iYSubX = pt[1] - pt[0];
			 mXToYSubX[pt[0]].insert(iYSubX);
			 mYSubXToX[iYSubX].insert(pt[0]);
		 }
		 return iMax;
	 }
	 int m_c;
 };

【单调队列】LeetCode1499:满足不等式的最大值,# 算法题,算法,leetcode,c++,单调队列,不等式,最大值

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关

下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法C++ 实现。

【单调队列】LeetCode1499:满足不等式的最大值,# 算法题,算法,leetcode,c++,单调队列,不等式,最大值文章来源地址https://www.toymoban.com/news/detail-774938.html

到了这里,关于【单调队列】LeetCode1499:满足不等式的最大值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 放缩不等式推导

    放缩不等式推导 1 )   a x x + 1 ( 1 a ≤ e , x 0 ; a ≥ e , x 0 ) ; 1) a^xx+1left(1aleq e,x0;ageq e,x0right); 1 )   a x x + 1 ( 1 a ≤ e , x 0 ; a ≥ e , x 0 ) ; p r o o f : proof: p roo f : f 01 ( x ) = a x − ( x + 1 ) ⇒ f 01 ′ ( x ) = a x ln ⁡ a − 1 f_{01}left(xright)=a^{x}-left(x+1right)Rightarrow f_{01}^{\\\'}left(xright) =

    2023年04月22日
    浏览(12)
  • Hoeffing不等式

    设 X 1 , X 2 , . . . , X N X_1,X_2,...,X_N X 1 ​ , X 2 ​ , ... , X N ​ 是独立随机变量,且 X i ∈ [ a i , b i ] , i = 1 , 2 , . . . , N ; S N = ∑ i = 1 N X i X_iin[a_i,b_i],i=1,2,...,N;S_N=sum_{i=1}^NX_i X i ​ ∈ [ a i ​ , b i ​ ] , i = 1 , 2 , ... , N ; S N ​ = ∑ i = 1 N ​ X i ​ ,则对任意t0,以下不等式成立:

    2024年02月07日
    浏览(16)
  • 不等式证明(三)

    设 p , q p ,q p , q 是大于1的常数,并且 1 p + 1 q = 1 frac{1}{p}+frac{1}{q}=1 p 1 ​ + q 1 ​ = 1 .证明:对于任意的 x 0 x0 x 0 ,有 1 p x p + 1 q ≥ x frac{1}{p}x^p+frac{1}{q}geq x p 1 ​ x p + q 1 ​ ≥ x . 证明 : 设 f ( x ) = 1 p x p + 1 q − x (1) f(x)=frac{1}{p}x^p+frac{1}{q}- xtag{1} f ( x ) = p 1 ​ x p + q 1 ​

    2024年01月21日
    浏览(21)
  • 各种数学不等式

    各种数学不等式

    以丹麦技术大学数学家约翰·延森(John Jensen)命名。它给出积分的凸函数值和凸函数的积分值间的关系。 是数学家柯西(Cauchy)在研究数学分析中的“流数”问题时得到的。 是柯西不等式的推广. 赫尔德不等式是数学分析的一条不等式,取名自奥图·赫尔德(Otto Hölder) 是德国

    2024年02月14日
    浏览(12)
  • 高中数学:不等式(初接高)

    高中数学:不等式(初接高)

    最后的例题,是为了说明第三种情况,就是,不等号右边不为0时,要先进行移项操作。 将右边化为0 这样,就转化成1,2两种情况了。 补充: 不等式解法中,对于根式的转化,要考虑仔细,不能少考虑了情况,否则求出的结果就出错。 这个,也是最难的,最考验答题人的细心

    2024年01月24日
    浏览(12)
  • 切比雪夫(Chebyshev)不等式

    切比雪夫(Chebyshev)不等式

    设随机变量x具有数学期望 E ( x ) = μ E(x) = mu E ( x ) = μ ,方差 D ( x ) = σ 2 D(x) = sigma^{2} D ( x ) = σ 2 。记 X ∗ = X − μ σ X^{* } =frac{X-mu }{sigma } X ∗ = σ X − μ ​ , 则X*的期望和方差为: E ( X ∗ ) = 1 σ E ( X − μ ) = 1 σ [ E ( X ) − μ ] = 0 E(X^{*})= frac{1}{sigma} E(X-mu)=frac{1}{sigma

    2024年01月16日
    浏览(14)
  • 四边形不等式学习笔记

    四边形不等式是一种 dp 优化策略。多用于 2D DP。 对于区间 ([l,r]) 带来的贡献 (w(l,r)) ,如果其满足: 对于 (Lleq lleq r leq R) , (w(L,r)+w(l,R)leq w(L,R)+w(l,r)) 则称 (w) 满足 四边形不等式 。特别地,如果上式符号取等,则称其满足 四边形恒等式 。 注:上面的不等式可以记

    2023年04月10日
    浏览(13)
  • 冶炼金属【暴力枚举 + 二分 + 二元不等式】

    冶炼金属【暴力枚举 + 二分 + 二元不等式】

    😊😊 😊😊 不求点赞,只求耐心看完,指出您的疑惑和写的不好的地方,谢谢您。本人会及时更正感谢。希望看完后能帮助您理解算法的本质 😊😊 😊😊 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V , V V V 是

    2024年02月02日
    浏览(13)
  • 线性矩阵不等式(LMI)(一):简单介绍

    线性矩阵不等式(LMI)(一):简单介绍

    主要从以下三个方面介绍: 什么是线性矩阵不等式(LMI) 为什么要用线性矩阵不等式(LMI) 线性矩阵不等式的发展(控制系统中) 1. 线性矩阵不等式 如名字所示线性矩阵不等式三要素为: 线性 - 注意双线性时,LMI不好求解(非凸问题);例:在不等式中出现 P A K PAK P A K 形式,其

    2024年01月20日
    浏览(20)
  • 切比雪夫不等式,大数定律及极限定理。

    切比雪夫不等式,大数定律及极限定理。

    1.定理 若随机变量X的期望EX和方差DX存在,则对任意ε 0,有    P{ |X - EX| = ε } = DX/ε 2 或 P{ |X - EX| ε } = 1 - DX/ε 2 2.解析定理 ①该定理对 X 服从什么分布不做要求,仅EX DX存在即可。 ②“| |” 由于X某次试验结果可能大于期望值,也可能小于期望值,但总在其旁边波动,所 以加

    2024年02月06日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包