【ARTS】【LeetCode-2873】有序三元組中的最大值!

前言

僅做學習使用,侵刪

什么是ARTS?

算法(Algorithm): 每周至少一道LeetCode算法題,加強編程訓練和算法學習

閱讀(Review): 閱讀并點評至少一篇英文技術文章,提高英文水平

技巧 (Tip):學習至少一個技術技巧,總結、歸納日常工作中遇到的知識點

分享(Share):分析一篇有關點和思考的技術文章,建立影響力,輸出價值觀

算法(Algorithm)

2873.有序三元組中的最大值!

題目描述

給你一個下標從 0 開始的整數數組 nums 。
請你從所有滿足 i < j < k 的下標三元組 (i, j, k) 中,找出并返回下標三元組的最大值。如果所有滿足條件的三元組的值都是負數,則返回 0 。
下標三元組 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k] 。示例 1:
輸入:nums = [12,6,1,2,7]
輸出:77
解釋:下標三元組 (0, 2, 4) 的值是 (nums[0] - nums[2]) * nums[4] = 77 。
可以證明不存在值大于 77 的有序下標三元組。
示例 2:
輸入:nums = [1,10,3,4,19]
輸出:133
解釋:下標三元組 (1, 2, 4) 的值是 (nums[1] - nums[2]) * nums[4] = 133 。
可以證明不存在值大于 133 的有序下標三元組。 
示例 3:
輸入:nums = [1,2,3]
輸出:0
解釋:唯一的下標三元組 (0, 1, 2) 的值是一個負數,(nums[0] - nums[1]) * nums[2] = -3 。因此,答案是 0 。提示:
? 3 <= nums.length <= 100
? 1 <= nums[i] <= 106

解題方法

方法一:暴力求解

思路

枚舉所有滿足 i<j<k 的三元組 (i,j,k),返回所有值大于等于 0 的三元組的最大值。

class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;long res = 0;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {for (int k = j + 1; k < n; k++) {res = Math.max(res, (long) (nums[i] - nums[j]) * nums[k]);}}}return res;}
}
復雜度分析
  • 時間復雜度:O(n3),其中 n 是數組 nums 的長度。
  • 空間復雜度:O(1)。

方法二:貪心

思路

固定三元組 (i,j,k) 的 j 和 k 時,由值公式 (nums[i]?nums[j])×nums[k] 可知,nums[i] 取區間 [0,j) 內的最大值時,(nums[i]?nums[j])×nums[k] 最大。使用兩層循環分別枚舉 k 和 j,同時使用 m 維護 [0,j) 的最大值,返回所有 (m?nums[j])×nums[k] 的最大值(若所有值都為負數,則返回 0)。

class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;long res = 0;for (int k = 2; k < n; k++) {int m = nums[0];for (int j = 1; j < k; j++) {res = Math.max(res, (long)(m - nums[j]) * nums[k]);m = Math.max(m, nums[j]);}}return res;}
}
復雜度分析
  • 時間復雜度:O(n2),其中 n 是數組 nums 的長度。
  • 空間復雜度:O(1)。

方法三:貪心 + 前后綴數組

思路

令數組 nums 的長度為 n。根據值公式 (nums[i]?nums[j])×nums[k] 可知,當固定 j 時,nums[i] 和 nums[k] 分別取 [0,j) 和 [j+1,n) 的最大值時,三元組的值最大。我們使用 leftMax[j] 和 rightMax[j] 維護前綴 [0,j) 最大值和后綴 [j+1,n) 最大值,依次枚舉 j,計算值 (leftMax[j]?nums[j])×rightMax[j],返回最大值(若所有值都為負數,則返回 0)。

public class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;int[] leftMax = new int[n];int[] rightMax = new int[n];for (int i = 1; i < n; i++) {leftMax[i] = Math.max(leftMax[i - 1], nums[i - 1]);rightMax[n - 1 - i] = Math.max(rightMax[n - i], nums[n - i]);}long res = 0;for (int j = 1; j < n - 1; j++) {res = Math.max(res, (long)(leftMax[j] - nums[j]) * rightMax[j]);}return res;}
}
復雜度分析
  • 時間復雜度:O(n),其中 n 是數組 nums 的長度。
  • 空間復雜度:O(n)。

方法四:貪心

思路

類似于方法三,我們固定 k,那么當 nums[i]?nums[j] 取最大值時,三元組的值最大。我們可以用 imax 維護 nums[i] 的最大值,dmax 維護 nums[i]?nums[j] 的最大值,在枚舉 k 的過程中,更新 dmax 和 imax。

class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;long res = 0, imax = 0, dmax = 0;for (int k = 0; k < n; k++) {res = Math.max(res, dmax * nums[k]);dmax = Math.max(dmax, imax - nums[k]);imax = Math.max(imax, nums[k]);}return res;}
}
復雜度分析
  • 時間復雜度:O(n),其中 n 是數組 nums 的長度。
  • 空間復雜度:O(1)。

分享(Share)

文章閱讀

BeanUtils對比 12 種 Bean 自動映射工具,就它性能最拉跨_java beanutils modelmapper-CSDN博客

危險!請馬上替換代碼中的BeanUtils!!!

因為現在系統中正在使用BeanUtils 看到文章,但是經過詢問基本不會出現這種問題

接口 TPS是什么

接口 TPS(Transactions Per Second)是指每秒鐘系統能夠處理的接口事務數量,它是衡量系統性能的重要指標之一。一個事務是指一個客戶端向服務器發送請求,服務器進行處理并返回響應的完整過程。在接口性能測試中,TPS 常被用來評估接口的處理能力。TPS 值越高,說明系統在單位時間內能夠處理更多的事務,性能越好

參考資料

作者:力扣官方題解

鏈接:2873. 有序三元組中的最大值 I - 力扣(LeetCode)

來源:力扣(LeetCode)

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75889.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75889.shtml

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

相關文章

基于spring boot 鮮花銷售系統PPT(源碼+lw+部署文檔+講解),源碼可白嫖!

課題意義 隨著網絡不斷的普及發展&#xff0c;鮮花銷售系統依靠網絡技術的支持得到了快速的發展&#xff0c;首先要從用戶的實際需求出發&#xff0c;通過了解用戶的需求開發出具有針對性的信息管理系統&#xff0c;利用目前網絡給用戶帶來的方便快捷這一特點對系統進行調整&am…

Redis常用的數據結構及其使用場景

字符串(String) string 是 redis 最基本的類型&#xff0c;你可以理解成與 Memcached 一模一樣的類型&#xff0c;一個 key 對應一個 value。 string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據&#xff0c;比如jpg圖片或者序列化的對象。 string 類型是 R…

設計模式簡述(五)建造者模式

建造者模式 描述基本要素協調類使用 描述 建造者模式屬于創造型設計模式。 通常用于構建一系列復雜對象&#xff0c;這些對象有一定的共性。 我們可以通過不同的建造者&#xff0c;組裝不同的對象 與工廠模式的區別&#xff0c;建造者模式更側重與基于基礎構件組裝而非直接創…

Java基礎 4.6

1.成員方法練習 //編寫類A&#xff1a;判斷一個數是奇數還是偶數&#xff0c;返回boolean //根據行、列、字符打印對應行數和列數的字符&#xff0c;比如&#xff1a;行4 列4 字符# 則打印相應的效果 public class MethodExercise01 {public static void main(String[] args) …

前端快速入門學習4——CSS盒子模型、浮動、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"這一術語是用來設計和布局時使用。 CSS盒模型本質上是一個盒子&#xff0c;封裝周圍的HTML元素&#xff0c;它包括&#xff1a;邊距&#xff0c;邊框&#xff0c;填充&#xff0c…

瑞數信息發布《BOTS自動化威脅報告》,揭示AI時代網絡安全新挑戰

近日&#xff0c;瑞數信息正式發布《BOTS自動化威脅報告》&#xff0c;力求通過全景式觀察和安全威脅的深度分析&#xff0c;為企業在AI時代下抵御自動化攻擊提供安全防護策略&#xff0c;從而降低網絡安全事件帶來的影響&#xff0c;進一步增強業務韌性和可持續性。 威脅一&am…

Docker設置代理

目錄 前言創建代理文件重載守護進程并重啟Docker檢查代理驗證 前言 拉取flowable/flowable-ui失敗&#xff0c;用DaoCloud源也沒拉下來&#xff0c;不知道是不是沒同步。索性想用代理拉鏡像。在此記錄一下。 創建代理文件 創建docker代理配置 sudo mkdir -p /etc/systemd/s…

Debezium嵌入式連接postgresql封裝服務

文章目錄 1.項目結構&#xff1a;2.依賴&#xff1a;3.application.properties4.DebeziumConnectorConfig類5.TableEnum類6.TableHandler接口&#xff08;表處理抽象&#xff09;7.DefaultTableHandler默認實現類8.UserTableHandler處理類9.TableHandlerFactory工廠10.Debezium…

ER-圖,詳情和畫法

一、E-R圖的核心元素 1.實體 表示現實中對象或概念&#xff0c;用矩形表示 示例&#xff1a;用戶、老師、學生 2.屬性 描述實體的特征&#xff0c;用橢圓表示。 分為主鍵&#xff08;用戶id&#xff09; 和非主鍵&#xff08;用戶昵稱&#xff09; 3.關系 表示實體間的…

Windows Flip PDF Plus Corporate PDF翻頁工具

軟件介紹 Flip PDF Plus Corporate是一款功能強大的PDF翻頁工具&#xff0c;也被稱為名編輯電子雜志大師。這款軟件能夠迅速將PDF文件轉換為具有翻頁動畫效果的電子書&#xff0c;同時保留原始的超鏈接和書簽。無論是相冊、視頻、音頻&#xff0c;還是Flash、視頻和鏈接&#…

Linux文件系統中的Page Cache和內存管理中的Page之間的關系

Linux文件系統中的Page Cache和內存管理中的Page之間有密切的關聯&#xff0c;兩者在底層機制上緊密結合&#xff0c;共同實現高效的內存和文件系統管理。以下是它們的關系和關鍵點&#xff1a; 核心關系 Page Cache的底層是內存Page Page Cache是由內存管理中的物理內存頁&…

每日一個小病毒(C++)EnumChildWindows+shellcode

這里寫目錄標題 1. `EnumChildWindows` 的基本用法2. 如何利用 `EnumChildWindows` 執行 Shellcode?關鍵點:完整 Shellcode 執行示例3. 為什么 `EnumChildWindows` 能執行 Shellcode?4. 防御方法5. 總結EnumChildWindows 是 Windows API 中的一個函數,通常用于枚舉所有子窗…

AI爬蟲?爬!

1.你是否還在為大模型的key而感到憂傷和囊中羞澀&#xff0c;openrouter.ai&#xff0c;目前可免費白嫖多個大模型&#xff0c;代碼如下 from openai import OpenAIclient OpenAI(base_url"https://openrouter.ai/api/v1",api_key"", )completion clien…

洛谷題單3-P5720 【深基4.例4】一尺之棰-python-流程圖重構

題目描述 《莊子》中說到&#xff0c;“一尺之棰&#xff0c;日取其半&#xff0c;萬世不竭”。第一天有一根長度為 a a a 的木棍&#xff0c;從第二天開始&#xff0c;每天都要將這根木棍鋸掉一半&#xff08;每次除 2 2 2&#xff0c;向下取整&#xff09;。第幾天的時候木…

c++中的auto關鍵字

在 C 中&#xff0c;auto 是一個類型推斷關鍵字&#xff08;C11 引入&#xff09;&#xff0c;允許編譯器根據變量的初始化表達式自動推導其類型。它極大地簡化了代碼編寫&#xff0c;尤其在涉及復雜類型或模板的場景中。以下是 auto 的詳細說明&#xff1a; 1. 基本用法 1.1 …

開發指南111-關閉所有打開的子窗口

門戶系統是通過window.open通過單點登錄的模式打開子系統的&#xff0c;這就要求門戶系統退出時&#xff0c;關閉所有打開的子系統。 平臺處理這一問題的核心原理如下&#xff1a; 主窗口定義&#xff1a; allChildWindows:[], //所有子窗口 pushChildWindow(childWindow){ …

Kotlin語言進階:協程、Flow、Channel詳解(二)

Kotlin語言進階:協程、Flow、Channel詳解(二) 一、Flow基礎 1.1 什么是Flow Flow是Kotlin提供的用于處理異步數據流的解決方案,它建立在協程之上,具有以下特點: 冷流特性:只有在收集時才會開始發射數據背壓處理:自動處理生產者和消費者速度不匹配的問題組合操作:提…

mysql中my.cnf權限不能過大。否則無法生效

mysql 報錯 World-writable config file ‘/etc/my.cnf‘ is ignored. /etc/my.cnf 配置文件, 或著docker 掛載的配置文件(宿主機中的配置文件),權限過大 如是二進制啟動 chmod 644 /etc/my.cnf 如是docker啟動 chmod 644 /opt/docker-data/mysql/conf/my.cnf 重啟服務,就可…

Spring 中的 @Autowired 和 @Resource

&#x1f9e9; 一、Autowired 和 Resource 的基本作用 注解來源作用AutowiredSpring 提供&#xff08;org.springframework.beans.factory.annotation.Autowired&#xff09;按類型 自動注入ResourceJDK 提供&#xff08;javax.annotation.Resource&#xff09;默認按名稱 注入…

anomalib—2—輸入圖像大小調整

三個地方 第一&#xff1a;在定義model時&#xff0c;要在pre_processor里面去定義一個前處理&#xff0c;前處理就一個功能&#xff0c;定義圖像的大小 pre_processor0 Patchcore.configure_pre_processor( image_size (128, 128)) model Patchcore( backbone"wide_r…