leetcode-3443. K次修改后的最大曼哈顿距离

题目 描述

示例 输入

解题 思路

一开始觉得需要画个图找一下灵感,因为最难的是这个k次修改,修改要改在关键的地方才能使得最大曼哈顿距离更远,所以由于一直想不到k要在哪里改才能合适,导致这个题目卡了很久。

后面把思路换了一下:

我把N,W,S,E划分成了两个阵营在对抗,N与S对抗,W与E在对抗。

这样给定一个字符串,我永远能够计算出在字符串结尾部分此时的曼哈顿距离是多少,只需要求abs(N-S) + abs(W-E)就可以了。而所谓的修改,无非是把S转化为N或者N转化为S(以纵向为例),使得优势阵营进一步扩大,最终导致曼哈顿距离的增长。而当劣势阵营已经没有值可以再转化时,如果k没有用完那就剩余的修改次数就丢掉;而如果k不够将所有的劣势阵营转化为优势方,就最多只能转换k次。

由此我们可以按题目给的s进行遍历,并充分利用k次转换,这样可以得到每一步的曼哈顿距离,如果超过记录的最大值就更新。遍历完之后的最大曼哈顿距离就是结果。

我愿意将此题称之为见风使舵!!!

代码

复制代码
class` `Solution` `{`
`public:`
    `int` `maxDistance(string s,` `int k)` `{`
    `int N=0,S=0,W=0,E=0,Max_` `=` `0,Max_NS,Max_WE,Min_NS,Min_WE,add,tmp;`
	`for(int i` `=` `0; i` `< s.size(); i++)`
	`{`
		`if(s[i]` `==` `'N') N++;`
		`else` `if(s[i]` `==` `'S') S++;`
		`else` `if(s[i]` `==` `'W') W++;`
		`else E++;`
`		Max_NS` `=` `max(N,S);`
`		Min_NS` `=` `min(N,S);`
`		Max_WE` `=` `max(W,E);`
`		Min_WE` `=` `min(W,E);`
`		add` `= k` `>` `(Min_WE` `+ Min_NS)` `?` `(Min_WE` `+ Min_NS)` `: k;`
`		tmp` `=` `(Max_NS` `+ Max_WE` `+` `2` `* add` `-` `(Min_NS` `+ Min_WE));`
		`if(tmp` `> Max_) Max_` `= tmp;`
	`}`
	`return Max_;`
    `}`
`};`
`
相关推荐
minglie118 小时前
实数列的常用递推模式
算法
代码小书生18 小时前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星18 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室18 小时前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz18 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva
leoufung18 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
小O的算法实验室18 小时前
2026年IEEE TETCI,山区环境下基于双种群进化的协同无人机巡逻任务协同优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
生成论实验室19 小时前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
风筝在晴天搁浅19 小时前
字节高频题 小于n的最大数
算法
LabVIEW开发19 小时前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序