首先,先附上链接: 3443. K 次修改后的最大曼哈顿距离 - 力扣(LeetCode)
【题目理解】
这个是计算修改k次之后的最大曼哈顿距离。 则所谓的最优距离即是我尽可能在2个方向移动。而且我要转换的方向是移动步数比较多的方向。或者可以换一个说法,我要尽可能的将WS中的一个转换为另一个,同理,我要把AD中的一个转换为另外一个。
【version-1】
- 你应该如何去判断是将W->S 还是 S->W,同理,应该如何判断AD之间的转换关系?
Ans:为了尽可能少的次数,应该去选择将数量较少的转换为数量较多的。如W的次数为5个,S的次数为4个,则下将S转换为W。 2. WSAD与N之间的数学关系是什么?
Ans:假设W的数量以num(W)来表示,其他三个同理。我们需要计算abs(num(w)-num((s))+abs(num(a)-num(d))应该是min(num(S),num(N))+min(num(W),num(E))之间的关系。将计算出的值相加后取名为num_X后,我们可以分类为以下情况考虑:
- num_X > n : 就表示无法全部修改,因此需要取 max(W,S)+max(N,E)+1
- num_X = n : 长度
- num_X < n : 注意关键字任意时刻,此时最大距离应该为 len(num)
【案例验证】 案例一:
s = "NWSE", k = 1
num_X=2<1,所以应该为情况1,值为3
案例二:
s = "NSWWEW", k = 3
num_X = 2 < 5,答案为 6
【思路错误】 例如
WSSW
最大值应该为1,但如果按该公式则为2.对应策略,在修改之后手动进行计算。
【修改后思路】 将数量较少的字母当作一个整体num,如果num>k,则数量会增加2*k,反之,则为数组长度。 总结,还是需要循环计算。