1、重要的数学推导:

|a| = Max(a, -a)
|a-b|+|c-d|
= Max(a-b, b-a) + Max(c-d, d-c)     // max(a-b, -(a-b)) + max(c-d, -(c-d))
= Max{(a-b)+(c-d),(b-a)+(c-d),     // -(a - b) + (c - d)(a-b)+(d-c),(b-a)+(d-c),     // -(a - b) + (c - d) }

2、对于此题就有:

|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|
= max(arr1[i] - arr1[j], arr1[j] - arr1[i]) + max(arr2[i] - arr2[j], arr2[j]-arr2[j]) + max(i-j, j-i)
=max{(arr1[i] + arr2[i] + i) - (arr1[j] + arr2[j] + j) //式1(arr1[i] + arr2[i] - i) - (arr1[j] + arr2[j] - j) //式2(arr1[i] - arr2[i] + i) - (arr1[j] - arr2[j] + j) //式3(arr1[i] - arr2[i] - i) - (arr1[j] - arr2[j] - j) //式4-(arr1[i] + arr2[i] + i) + (arr1[j] + arr2[j] + j)//式5-(arr1[i] + arr2[i] - i) + (arr1[j] + arr2[j] - j)//式6-(arr1[i] - arr2[i] + i) + (arr1[j] - arr2[j] + j)//式7-(arr1[i] - arr2[i] - i) + (arr1[j] - arr2[j] - j)//式8}

设:

A = arr1[i] + arr2[i] + i
B = arr1[i] + arr2[i] - i
C = arr1[i] - arr2[i] + i
D = arr1[i] - arr2[i] - i

因为我们要求绝对值表达式的最大值,所以对于上面的表达式,每个表达式都应取最大值,就是说只有让前面符号是正的最大,前面符号是负的最小才行,这样就能O(n)算出绝对值表达式的最大值了

|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|
=max(  max(A) - min(A),max(B) - min(B),max(C) - min(C),max(D) - min(D),-min(A) + max(A),-min(B) + max(B),-min(C) + max(C),-min(C) + max(C))

实现代码:

class Solution {public:int maxAbsValExpr(vector<int>& arr1, vector<int>& arr2) {int f[8][3] = { { 1, 1, 1}, { 1, -1, 1}, { 1,-1,-1}, {1,1,-1},{-1, 1, 1}, {-1, -1, 1}, {-1, 1,-1}, {-1,-1,-1}};int ans = INT_MIN;for(int k = 0; k < 8; k++){int mx = INT_MIN;int mi = INT_MAX;for(int i = 0; i < arr1.size(); i++){mx = max(mx, arr1[i]*f[k][0] + arr2[i]*f[k][1] + i*f[k][2]);mi = min(mi, arr1[i]*f[k][0] + arr2[i]*f[k][1] + i*f[k][2]);}ans = max(ans, mx - mi);}return ans;}
};

当然上面其实是有重复的。如: max(A) - min(A) == -min(A) + max(A)
所以可以改成这样:

class Solution {public:int maxAbsValExpr(vector<int>& arr1, vector<int>& arr2) {int f[4][3] = { { 1, 1, 1}, { 1, -1, 1}, { 1,-1,-1}, {1,1,-1}};int ans = INT_MIN;for(int k = 0; k < 4; k++){int mx = INT_MIN;int mi = INT_MAX;for(int i = 0; i < arr1.size(); i++){mx = max(mx, arr1[i]*f[k][0] + arr2[i]*f[k][1] + i*f[k][2]);mi = min(mi, arr1[i]*f[k][0] + arr2[i]*f[k][1] + i*f[k][2]);}ans = max(ans, mx - mi);}return ans;}
};

[leetcode]1131. 绝对值表达式的最大值 --绝对值表达式枚举拆分的方法相关推荐

  1. 【数学】B080_LC_绝对值表达式的最大值(表达式的符号分类)

    一.Problem Given two arrays of integers with equal lengths, return the maximum value of: |arr1[i] - a ...

  2. LeetCode 1131. 绝对值表达式的最大值(数学 绝对值展开)

    文章目录 1. 题目 2. 解题 1. 题目 给你两个长度相等的整数数组,返回下面表达式的最大值: |arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j ...

  3. 绝对值表达式的最大值(Java)

    给出两个长度相等的整数数组,返回下面表达式的最大值: |arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j| 其中下标 i,j 满足 0 <= i ...

  4. leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)

    题目 https://leetcode.com/problems/expression-add-operators/description/ 题解 中缀表达式求值问题,参考:leetcode 227. ...

  5. JS 中的Math方法向上取整、向下取整、保留整数、绝对值、取最大值、最小值等

    JS 中的Math方法向上取整.向下取整.保留整数.绝对值.取最大值.最小值等 1.只保留整数部分(丢弃小数部分) parseInt(5.1234);// 5 2.向下取整(<= 该数值的最大整 ...

  6. python相等的表达式_02-python-运算符与表达式

    1. 比较运算符 假设x=10, y=20 运算符 中文名 描述 == 等于等于 比较x,y是否相等 != 不等于 比较x,y是否不相等 > 大于 x>y,比较x是否大于y < 小于 ...

  7. 1597. 根据中缀表达式构造二叉表达式树 双端队列

    1597. 根据中缀表达式构造二叉表达式树 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时 ...

  8. c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)

    逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...

  9. 将中缀表达式转化为后缀表达式

    我们把平时所用的标准四则运算表达式,即"9+(3-1)*3+10/2"叫做中缀表达式.因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化. 中缀表达式" ...

最新文章

  1. 2022-2028年中国环烷基润滑油行业市场研究及前瞻分析报告
  2. 【VS开发】【智能语音处理】Windows下麦克风语音采集
  3. NSIS修改开始菜单中图标
  4. git lfs出现This repository is over its data quota
  5. jzoj2908,P1527-[集训队互测 2012]矩阵乘法【整体二分,二维树状数组】
  6. java初始化该字符串值_java字符串数组初始化和赋值
  7. Arduino笔记-解决ESP8266上传代码时出现error: espcomm_upload_mem failed问题
  8. java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/Str
  9. 一步步实现koa核心代码
  10. 图像语义分割python_图像语义分割出的json文件和原图,用plt绘制图像mask
  11. Interesting Finds: 2007.12.19
  12. ubuntu 10.04下vmware tools安装和一些应用
  13. php preg_split 正则截取字符串
  14. OSChina 周二乱弹 —— 技术宅正确装逼姿势
  15. 5.MSDN的下载和使用
  16. 《从零开始学架构:照着做,你也能成为架构师》李运华 读后感
  17. mac os安装Windows系统失败后不能合并为一个分区
  18. 使用JConsole观察分析Java程序的运行(转)
  19. iOS中视图切换的四种方式
  20. 桌面的快捷方式图标异常

热门文章

  1. python不会英语不会数学怎么自学-英语和数学都不好,但是我想学Python编程可以吗?...
  2. python代码-20个Python代码段,你需要立刻学会,好用到哭!
  3. 专科python应届生工资多少-Python这么火热,本科应届生薪资这么高?
  4. 零基础学python图文版-Day2 怎么学 Python?
  5. 简单python脚本实例-对Python实现简单的API接口实例讲解
  6. python有什么用-python有什么用(用处和用途)
  7. python与java前景-java和python学习哪个未来发展前景更好?
  8. python中文视频教程-中谷教育python中文视频教程(全38集)
  9. 语音识别如今发展到什么阶段了?
  10. HTML 制作简历表单