LeetCode435周賽T2貪心

題目描述

給你一個由字符 '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.pswp.cn/web/67795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67795.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.5 高級索引應用:圖像處理中的區域提取

2.5 高級索引應用&#xff1a;圖像處理中的區域提取 目錄/提綱 #mermaid-svg-BI09xc20YqcpUam7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BI09xc20YqcpUam7 .error-icon{fill:#552222;}#mermaid-svg-BI09xc20…

ubuntu直接運行arm環境qemu-arm-static

qemu-arm-static 嵌入式開發有時會在ARM設備上使用ubuntu文件系統。開發者常常會面臨這樣一個問題&#xff0c;想預先交叉編譯并安裝一些應用程序&#xff0c;但是交叉編譯的環境配置以及依賴包的安裝十分繁瑣&#xff0c;并且容易出錯。想直接在目標板上進行編譯和安裝&#x…

通過Redisson構建延時隊列并實現注解式消費

目錄 一、序言二、延遲隊列實現1、Redisson延時消息監聽注解和消息體2、Redisson延時消息發布器3、Redisson延時消息監聽處理器 三、測試用例四、結語 一、序言 兩個月前接了一個4萬的私活&#xff0c;做一個線上商城小程序&#xff0c;在交易過程中不可避免的一個問題就是用戶…

MVC 文件夾:架構之美與實際應用

MVC 文件夾:架構之美與實際應用 引言 MVC(Model-View-Controller)是一種設計模式,它將應用程序分為三個核心組件:模型(Model)、視圖(View)和控制器(Controller)。這種架構模式不僅提高了代碼的可維護性和可擴展性,而且使得開發流程更加清晰。本文將深入探討MVC文…

【PyQt】lambda函數,實現動態傳遞參數

為什么需要 lambda&#xff1f; 在 PyQt5 中&#xff0c;clicked 信號默認會傳遞一個布爾值&#xff08;表示按鈕是否被選中&#xff09;。如果我們希望將按鈕的文本內容傳遞給槽函數&#xff0c;需要通過 lambda 函數顯式傳遞參數。 這樣可以實現將按鈕內容傳遞給槽函數&…

pytorch深度Q網絡

人工智能例子匯總&#xff1a;AI常見的算法和例子-CSDN博客 DQN 引入了深度神經網絡來近似Q函數&#xff0c;解決了傳統Q-learning在處理高維狀態空間時的瓶頸&#xff0c;尤其是在像 Atari 游戲這樣的復雜環境中。DQN的核心思想是使用神經網絡 Q(s,a;θ)Q(s, a; \theta)Q(s,…

Baklib構建高效協同的基于云的內容中臺解決方案

內容概要 隨著云計算技術的飛速發展&#xff0c;內容管理的方式也在不斷演變。企業面臨著如何在數字化轉型過程中高效管理和協同處理內容的新挑戰。為應對這些挑戰&#xff0c;引入基于云的內容中臺解決方案顯得尤為重要。 Baklib作為創新型解決方案提供商&#xff0c;致力于…

DeepSeek-R1 論文. Reinforcement Learning 通過強化學習激勵大型語言模型的推理能力

論文鏈接&#xff1a; [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 實在太長&#xff0c;自行扔到 Model 里&#xff0c;去翻譯去提問吧。 工作原理&#xff1a; 主要技術&#xff0c;就是訓練出一些專有用途小模型&…

C++泛型編程指南03-CTAD

文章目錄 C17 自定義類型推斷指引&#xff08;CTAD&#xff09;深度解析一、基礎概念1. 核心作用2. 工作原理 二、標準庫中的 CTAD 應用1. 容器類型推導2. 智能指針推導3. 元組類型推導 三、自定義推導指引語法1. 基本語法結構2. 典型應用場景 四、推導指引設計模式1. 迭代器范…

deepseek+vscode自動化測試腳本生成

近幾日Deepseek大火,我這里也嘗試了一下,確實很強。而目前vscode的AI toolkit插件也已經集成了deepseek R1,這里就介紹下在vscode中利用deepseek幫助我們完成自動化測試腳本的實踐分享 安裝AI ToolKit并啟用Deepseek 微軟官方提供了一個針對AI輔助的插件,也就是 AI Toolk…

電介質超表面中指定渦旋的非線性生成

渦旋光束在眾多領域具有重要應用&#xff0c;但傳統光學器件產生渦旋光束的方式限制了其在集成系統中的應用。超表面的出現為渦旋光束的產生帶來了新的可能性&#xff0c;尤其是在非線性領域&#xff0c;盡管近些年來已經有一些研究&#xff0c;但仍存在諸多問題&#xff0c;如…

基于Springboot+mybatis+mysql+html圖書管理系統2

基于Springbootmybatismysqlhtml圖書管理系統2 一、系統介紹二、功能展示1.用戶登陸2.用戶主頁3.圖書查詢4.還書5.個人信息修改6.圖書管理&#xff08;管理員&#xff09;7.學生管理&#xff08;管理員&#xff09;8.廢除記錄&#xff08;管理員&#xff09; 三、數據庫四、其它…

重構字符串(767)

767. 重構字符串 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:string reorganizeString(string s){string res;//因為1 < s.length < 500 &#xff0c; uint64_t 類型足夠uint16_t n s.size();if (n 0) {return res;}unordere…

本地部署DeepSeek方法

本地部署完成后的效果如下圖&#xff0c;整體與chatgpt類似&#xff0c;只是模型在本地推理。 我們在本地部署主要使用兩個工具&#xff1a; ollamaopen-webui ollama是在本地管理和運行大模型的工具&#xff0c;可以直接在terminal里和大模型對話。open-webui是提供一個類…

游戲引擎 Unity - Unity 啟動(下載 Unity Editor、生成 Unity Personal Edition 許可證)

Unity Unity 首次發布于 2005 年&#xff0c;屬于 Unity Technologies Unity 使用的開發技術有&#xff1a;C# Unity 的適用平臺&#xff1a;PC、主機、移動設備、VR / AR、Web 等 Unity 的適用領域&#xff1a;開發中等畫質中小型項目 Unity 適合初學者或需要快速上手的開…

【開源免費】基于Vue和SpringBoot的公寓報修管理系統(附論文)

本文項目編號 T 186 &#xff0c;文末自助獲取源碼 \color{red}{T186&#xff0c;文末自助獲取源碼} T186&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

Haskell語言的多線程編程

Haskell語言的多線程編程 Haskell是一種基于函數式編程范式的編程語言&#xff0c;以其強大的類型系統和懶惰求值著稱。近年來&#xff0c;隨著多核處理器的發展&#xff0c;多線程編程變得日益重要。雖然Haskell最初并不是為了多線程而設計&#xff0c;但它的設計理念和工具集…

《蒼穹外賣》項目學習記錄-Day11訂單統計

根據起始時間和結束時間&#xff0c;先把begin放入集合中用while循環當begin不等于end的時候&#xff0c;讓begin加一天&#xff0c;這樣就把這個區間內的時間放到List集合。 查詢每天的訂單總數也就是查詢的時間段是大于當天的開始時間&#xff08;0點0分0秒&#xff09;小于…

【python】python油田數據分析與可視化(源碼+數據集)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【python】python油田數據分析與可視化&#xff08…

FBX SDK的使用:基礎知識

Windows環境配置 FBX SDK安裝后&#xff0c;目錄下有三個文件夾&#xff1a; include 頭文件lib 編譯的二進制庫&#xff0c;根據你項目的配置去包含相應的庫samples 官方使用案列 動態鏈接 libfbxsdk.dll, libfbxsdk.lib是動態庫&#xff0c;需要在配置屬性->C/C->預…