Day3-Leetcode每日一题

47 阅读2分钟

首先,先附上链接: 3443. K 次修改后的最大曼哈顿距离 - 力扣(LeetCode)


【题目理解】

这个是计算修改k次之后的最大曼哈顿距离。 则所谓的最优距离即是我尽可能在2个方向移动。而且我要转换的方向是移动步数比较多的方向。或者可以换一个说法,我要尽可能的将WS中的一个转换为另一个,同理,我要把AD中的一个转换为另外一个。

【version-1】

  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后,我们可以分类为以下情况考虑:

  1. num_X > n : 就表示无法全部修改,因此需要取 max(W,S)+max(N,E)+1
  2. num_X = n : 长度
  3. 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,反之,则为数组长度。 总结,还是需要循环计算。