LeetCode435周赛T2贪心

embedded/2025/2/3 18:26:15/

题目描述

给你一个由字符 'N''S''E''W' 组成的字符串 s,其中 s[i] 表示在无限网格中的移动操作:

  • 'N':向北移动 1 个单位。
  • 'S':向南移动 1 个单位。
  • 'E':向东移动 1 个单位。
  • 'W':向西移动 1 个单位。

初始时,你位于原点 (0, 0)。你 最多 可以修改 k 个字符为任意四个方向之一。

请找出在 按顺序 执行所有移动操作过程中的 任意时刻,所能达到的离原点的 最大曼哈顿距离

曼哈顿距离定义为两个坐标点 (xi, yi)(xj, yj) 的横向距离绝对值与纵向距离绝对值之和,即 |xi - xj| + |yi - yj|


解题思路

我们可以将问题分解为横坐标和纵坐标两部分,分别计算它们的贡献。

横坐标的计算

设当前向西走了 a 步,向东走了 b 步。

  • 如果 a < b,则横坐标为 b - a
  • 如果 a > b,则横坐标为 a - b

综合两种情况,横坐标为:
|x| = |a - b|

修改操作的影响

我们可以通过修改操作将某些移动方向调整为更优的方向。具体来说:

  1. 如果 a < b,则将 a 中的某些步数改为向东走。
  2. 如果 a > b,则将 b 中的某些步数改为向西走。

每次修改可以将 |a - b| 增加 2d,因为:

  • 如果 a < b,修改 d 步后,横坐标为:

    (b + d) - (a - d) = b - a + 2d

  • 如果 a > b,修改 d 步后,横坐标为:

    (a + d) - (b - d) = a - b + 2d

综合两种情况,修改后的横坐标为:

|x| = |a - b| + 2d

其中:
d = min({a,b,k})

然后将 k 减少 d,继续按照同样的方法计算纵坐标。


算法实现

以下是基于上述思路的算法实现:

class Solution {
public:int maxDistance(string s, int k) {int up = 0, down = 0, left = 0, right = 0;int res = 0;for(auto c : s){if(c == 'N')up += 1;if(c == 'S')down += 1;if(c == 'W')left += 1;if(c == 'E')right += 1;int t = k;int d = min({up,down,t});t -= d;int f = min({left,right, t});res = max(res, abs(up - down) + 2*d + abs(left - right) + 2 * f );}return res;}
};

思路总结

贪心。不要想后面会怎么走,假设当前就是最优解。面对每一个走法,都有一个应对方案


http://www.ppmy.cn/embedded/159239.html

相关文章

ubuntu 下使用deepseek

安装Ollama sudo snap install ollama 执行 ollama run deepseek-coder 然后进行等待。。。

【apt源】RK3588 平台ubuntu20.04更换apt源

RK3588芯片使用的是aarch64架构&#xff0c;因此在Ubuntu 20.04上更换apt源时需要使用针对aarch64架构的源地址。以下是针对RK3588芯片在Ubuntu 20.04上更换apt源到清华源的正确步骤&#xff1a; 步骤一&#xff1a;打开终端 在Ubuntu 20.04中&#xff0c;按下Ctrl Alt T打…

Python学习之旅:进阶阶段(五)数据结构-双端队列(collections.deque)

在 Python 的进阶学习过程中,数据结构的掌握至关重要。今天要介绍的双端队列(deque,即 double-ended queue),是一种非常实用的数据结构,Python 的collections模块中的deque类为我们提供了强大的双端队列操作功能。接下来,就一起深入了解双端队列吧。 一、什么是双端队列…

解决国内服务器 npm install 卡住的问题

在使用国内云服务器时&#xff0c;经常会遇到 npm install 命令执行卡住的情况。本文将分享一个典型案例以及常见的解决方案。 问题描述 在执行以下命令时&#xff1a; mkdir test-npm cd test-npm npm init -y npm install lodash --verbose安装过程会卡在这个状态&#xf…

【B站保姆级视频教程:Jetson配置YOLOv11环境(六)PyTorchTorchvision安装】

Jetson配置YOLOv11环境&#xff08;6&#xff09;PyTorch&Torchvision安装 文章目录 1. 安装PyTorch1.1安装依赖项1.2 下载torch wheel 安装包1.3 安装 2. 安装torchvisiion2.1 安装依赖2.2 编译安装torchvision2.2.1 Torchvisiion版本选择2.2.2 下载torchvisiion到Downloa…

JavaFX - 3D 形状

在前面的章节中&#xff0c;我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外&#xff0c;我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常&#xff0c;3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…

c++ 定点 new 及其汇编解释

&#xff08;1&#xff09; 代码距离&#xff1a; #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…

跨域问题解决实践

在软件开发中&#xff0c;经常会遇到跨域问题&#xff0c;这个问题比较头疼&#xff0c;今天主要介绍下遇到的跨域问题解决思路及如何解决&#xff1f; 1、首先是后端跨域问题 spring boot中的跨域配置如下&#xff1a; Configuration public class WebMvcConfig implements W…