2972.力扣每日一題7/11 Java(擊敗100%)

  • 博客主頁:音符猶如代碼
  • 系列專欄:算法練習
  • 關注博主,后期持續更新系列文章
  • 如果有錯誤感謝請大家批評指出,及時修改
  • 感謝大家點贊👍收藏?評論?

?

?

目錄

解題思路

解題方法

時間復雜度

空間復雜度

Code?


解題思路

該問題的目標是計算給定數組中,可以移除的遞增子數組的數量。一個子數組如果可以移除,意味著它在原數組中是遞增的。為了解決這個問題,我采用了以下策略:

  1. 尋找最長遞增前綴:首先,我尋找數組中從第一個元素開始的最長遞增子序列(前綴)。這是因為任何包含這個前綴的子數組都是遞增的,因此可以移除。

  2. 處理特殊情況:如果整個數組(除了最后一個元素外)都是遞增的,那么任何非空子數組都可以移除。在這種情況下,直接返回所有可能的子數組數量,即?n*(n+1)/2

  3. 枚舉遞增后綴:如果數組不是整體遞增的,那么我從數組的末尾開始,嘗試找到可以與前面找到的最長遞增前綴相結合的遞增后綴。對于每個這樣的后綴,我計算可以與它結合的最長遞增前綴的長度。

  4. 累加可移除子數組數量:對于每個找到的遞增后綴,我將其與兼容的前綴組合,形成可以移除的遞增子數組,并累加這些組合的數量。

解題方法

  1. 使用findLongestIncreasingPrefix方法找到最長遞增前綴

  2. 檢查是否整個數組(除最后一個元素外)都是遞增的。如果是,直接返回所有可能的子數組數量

  3. 如果不是整體遞增,使用循環從數組末尾開始查找遞增后綴

  4. 對于每個遞增后綴,使用findCompatiblePrefixLength方法找到可以與它結合的最長遞增前綴

  5. 累加可以與當前后綴組成遞增子數組的前綴數量

  6. 返回累加的數量作為結果

時間復雜度

  • findLongestIncreasingPrefix方法遍歷數組一次,時間復雜度為O(n)
  • 主循環從數組末尾開始,最多遍歷數組一次,對于每個位置,findCompatiblePrefixLength可能再次遍歷數組,因此總的時間復雜度為O(n^2)

空間復雜度

該算法只使用了幾個變量來存儲中間結果,沒有使用額外的數據結構來存儲大量數據,因此空間復雜度為O(1)

Code

class Solution {  public long incremovableSubarrayCount(int[] a) {  int n = a.length;  // 找到最長遞增前綴的長度  int prefixLength = findLongestIncreasingPrefix(a);  // 如果整個數組都是遞增的,則任何非空子數組都可以移除  if (prefixLength == n - 1) {  // 返回所有可能的非空子數組的數量(使用等差數列求和公式)  return (long)n * (n + 1) / 2;  }  long count = prefixLength + 2; // 初始化計數為整個前綴和整個數組本身  // 枚舉所有可能的遞增后綴  for (int suffixStart = n - 1;   suffixStart >= 0 && a[suffixStart] < (suffixStart + 1 < n ? a[suffixStart + 1] : Integer.MAX_VALUE);   suffixStart--) {  // 找到能與當前后綴組成遞增序列的最長前綴的長度  int compatiblePrefixLength = findCompatiblePrefixLength(a, prefixLength, suffixStart);  count += compatiblePrefixLength + 1; // 累加可以組成的遞增子數組數量  }  return count;  }  // 輔助方法:找到最長遞增前綴的長度  private int findLongestIncreasingPrefix(int[] a) {  int n = a.length;  int i = 0;  while (i < n - 1 && a[i] < a[i + 1]) {  i++;  }  return i;  }  // 輔助方法:找到與給定后綴兼容的最長前綴的長度  private int findCompatiblePrefixLength(int[] a, int initialPrefixLength, int suffixStart) {  int prefixLength = initialPrefixLength;  // 從之前找到的最長遞增前綴開始向前查找,直到找到可以與后綴組成遞增序列的前綴  while (prefixLength >= 0 && a[prefixLength] >= a[suffixStart]) {  prefixLength--;  }  return prefixLength + 1; // 返回兼容前綴的長度(包括prefixLength指向的元素)  }  
}

?

??A miss is as good as a mile

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

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

相關文章

RISC-V主要指令集介紹及規則

推薦資料 RISC-V Reader / RISC-V開放架構設計之道&#xff0c;適合新手閱讀。 概述 RISC-V的模塊化到底是如何實現的呢&#xff1f; 核心部分&#xff1a;RV32I&#xff0c;代表32位字長的整型指令集&#xff08;Integer&#xff09;&#xff0c;包含了許多整型指令如load…

在C++項目中添加錄像功能:從攝像頭捕獲到視頻文件的保存

在C項目中添加錄像功能&#xff1a;從攝像頭捕獲到視頻文件的保存 在這篇博客中&#xff0c;我們將介紹如何在一個現有的C項目中添加錄像功能&#xff0c;具體包括如何從攝像頭捕獲圖像并將其保存為視頻文件。我們將使用OpenCV庫來處理圖像捕獲和視頻寫入。 目錄 引言準備工…

Python學習筆記35:進階篇(二十四)pygame的使用之音頻文件播放

前言 基礎模塊的知識通過這么長時間的學習已經有所了解&#xff0c;更加深入的話需要通過完成各種項目&#xff0c;在這個過程中逐漸學習&#xff0c;成長。 我們的下一步目標是完成python crash course中的外星人入侵項目&#xff0c;這是一個2D游戲項目。在這之前&#xff…

元組列表之案例

1.列表推導式 基本語法&#xff1a; [表達式 for語句1 if 語句1 for語句2 if語句2 ........ ] 1.零到九的平方列表 a [i*i for i in range(10)] print(a) 2.for 循環前面加if else #如果是偶數乘以2&#xff0c;如果是奇數直接輸出 a [i*2 if i%2 0 else i for i in ran…

什么是生成器函數?

生成器函數&#xff08;Generator Function&#xff09;是 JavaScript 中一種特殊的函數&#xff0c;它可以在執行過程中暫停并在之后恢復執行。生成器函數使用 function* 語法定義&#xff0c;并且內部使用 yield 表達式來暫停函數執行并返回一個值。每次調用生成器函數返回的…

rabbitmq集群創建admin用戶之后,提示can access virtual hosts是No access狀態

問題描述&#xff1a; 因業務需要使用的rabbitmq是3.7.8版本的&#xff0c;rabbitmq在3.3.0之后就允許使用guest賬號的權限了&#xff0c;所以需要創建一個administrator標簽的用戶。 如下操作創建的用戶&#xff1a; 創建完成之后就提示如下的報錯&#xff1a; 注&#xff1a…

php表單提交并自動發送郵件給某個郵箱(示例源碼下載)

只需要將以下代碼內容進行復制即可用到自己的程序/API接口中&#xff1a; <?php if(!empty($_POST[is_post]) && $_POST[is_post]1){$url "https://www.aoksend.com/index/api/send_email";$name $_POST[name];$email $_POST[email];$subject $_POS…

探索Mojo模型:解鎖機器學習模型的可解釋性之旅

探索Mojo模型&#xff1a;解鎖機器學習模型的可解釋性之旅 在人工智能和機器學習領域&#xff0c;模型的可解釋性是一個至關重要的議題。隨著模型變得越來越復雜&#xff0c;理解模型的決策過程成為了一個挑戰。Mojo模型作為一種模型序列化格式&#xff0c;提供了一種方法來部…

Python 給存入 Redis 的鍵值對設置過期時間

Redis 是一種內存中的數據存儲系統&#xff0c;與許多傳統數據庫相比&#xff0c;它具有一些優勢&#xff0c;其中之一就是可以設置數據的過期時間。通過 Redis 的過期時間設置&#xff0c;可以為存儲在 Redis 中的數據設置一個特定的生存時間。一旦數據到達過期時間&#xff0…

mybatis日志記錄方案

首先對指定表進行監控 對表進行監控,那么就要使用的是statementInterceptor 攔截器 使用攔截器那么就要寫intercepts寫攔截條件進行攔截 監控只對與增刪改 查詢不進行監控 對于字段的監控,是誰修改了字段,那么就進行報警,或者提醒 消息提醒使用釘釘機器人進行消息提醒 P…

軟鏈接node_modules

公司項目很多微應用的子項目公用同一套模板&#xff0c;也就會使用同一個node_modules 1.先創建3個同樣的項目,并安裝一個其中的一個node_modules給他丟到外邊 2.win r -------> cmd --------> ctrlshift enter(已管理員身份打開cmd) 3.在窗口分別執行以下代碼…

視頻減小技巧:十大頂級視頻壓縮軟件

視頻壓縮軟件會盡可能地壓縮視頻&#xff0c;以便上傳到各個網站。通常&#xff0c;4K 或更高質量的視頻體積更大。壓縮軟件有助于壓縮體積。在這里&#xff0c;我們來討論一下 10 款最佳視頻壓縮軟件。 十大頂級視頻壓縮軟件 1. 奇客壓縮寶 奇客壓縮寶是由Geekersoft公司開發…

基于SpringBoot+MySQL的租房項目+文檔

&#x1f497;博主介紹&#x1f497;&#xff1a;?在職Java研發工程師、專注于程序設計、源碼分享、技術交流、專注于Java技術領域和畢業設計? 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的老師 Wechat / QQ 名片 :) Java精品實戰案例《700套》 2025最新畢業設計選題推薦…

數據庫系統中的Undo和Redo

在數據庫管理系統&#xff08;DBMS&#xff09;中&#xff0c;undo 和 redo 是兩種用于事務管理和故障恢復的重要機制。它們主要涉及事務的提交、回滾以及系統故障后的數據恢復。 Undo&#xff08;撤銷&#xff09; 作用&#xff1a;undo 用于撤銷未提交事務所做的修改&#…

極狐Gitlab使用(1)

目錄 續接上篇&#xff1a;極狐Gitlab安裝部署-CSDN博客 1. 關閉注冊功能 2. 創建群組 3. 創建用戶 5. 邀請成員到群組 6. 設置導入導出項目源 7. 通過gitee導入庫 8. 通過倉庫URL導入 9. 自創建項目 10. 默認分支main的權限 11. 使用普通用戶進入自建庫 12. 創建用…

java的遍歷的方法對比 效率對比

在 Java 中&#xff0c;遍歷對象的方式主要取決于對象的類型和數據結構。以下是幾種常見的遍歷方式&#xff0c;以及它們的效率比較&#xff1a; 普通的 for 循環&#xff1a; 效率&#xff1a;高。使用普通的 for 循環可以直接根據索引來訪問元素&#xff0c;適用于數組和實現…

Ubuntu系統上安裝Apache和WordPress

** 第一步跟新系統包 ** 首先跟新系統包 sudo apt update sudo apt upgrade第二步下載安裝apache sudo apt install apache2 ##查看apache的狀態是否啟動成功 sudo systemctl status apache2 ##查看服務器的ip地址 sudo ip a通過ip地址進行訪問apache頁面 第三步下載安裝…

git patch怎么使用?

通常當我們提到 "patch" 時&#xff0c;我們可能指的是以下幾種情況&#xff1a; 1. **應用補丁文件**&#xff1a; 如果你有一個 .patch 文件&#xff0c;你可以使用 git apply 命令來應用它。 bash git apply your-patch-file.patch 這會將補丁文件中的更改應用到…

軟件架構之嵌入式系統設計

軟件架構之嵌入式系統設計 第 12 章&#xff1a;嵌入式系統設計12.1 嵌入式系統概論12.2 嵌入式系統的組成12.2.1 硬件架構12.2.2 軟件架構 12.3 嵌入式開發平臺與調試環境12.3.1 嵌入式系統軟件開發平臺12.3.2 嵌入式開發調試 第 12 章&#xff1a;嵌入式系統設計 隨著計算機…

力扣 1兩數之和

nums [2,7,6,3] target 9 需要在這個中找到 nums中數字下標&#xff0c;累加和等于target 也就是說既要數字下標&#xff0c;又要nums中數字&#xff0c;還要查找 因此&#xff0c;考慮map這種既有key 又有value的哈希表 問題是 map,unordered_map, muti_map用哪一個呢&a…