每日算法-250511

每日算法 - 250511

記錄一下今天刷的幾道LeetCode題目,主要是關于貪心算法和數組處理。

1221. 分割平衡字符串

題目
在這里插入圖片描述

思路

貪心

解題過程

我們可以遍歷一次字符串,維護一個計數器 balance。當遇到字符 'L' 時,balance 增加;當遇到字符 'R' 時,balance 減少。當 balance 的值回到 0 時,說明從上一個平衡點(或字符串開頭)到當前位置的 'L''R' 字符數量相等,即找到了一個平衡字符串,此時結果 ret 加一。

復雜度

  • 時間復雜度: O ( N ) O(N) O(N), N為字符串長度。
  • 空間復雜度: O ( N ) O(N) O(N), 因為 ss.toCharArray() 創建了一個新的字符數組。如果只考慮額外空間(不包括輸入轉換),則為 O ( 1 ) O(1) O(1)

Code

class Solution {public int balancedStringSplit(String ss) {int ret = 0;char[] s = ss.toCharArray();int balance = 0; // Renamed sum to balance for clarityfor (int i = 0; i < s.length; i++) {if (s[i] == 'L') {balance++;} else { // s[i] == 'R'balance--;}if (balance == 0) {ret++;}}return ret;}
}

2405. 子字符串的最優劃分

題目
在這里插入圖片描述

思路

貪心

解題過程

我們遍歷字符串,目標是讓每個子字符串盡可能長,同時確保其中沒有重復字符。
使用一個頻率數組 map (或哈希集合) 來追蹤當前子字符串中已出現的字符。
遍歷字符串中的每個字符:

  1. 如果當前字符在 map 中已標記為出現過,則表示當前子字符串到此為止(不包括當前字符)是一個有效的劃分。我們讓結果 ret 增加,并重置 map (清空頻率記錄),然后將當前字符加入新的子字符串(即標記其在 map 中出現)。
  2. 如果當前字符未在 map 中出現過,則將其加入當前子字符串(標記其在 map 中出現),并繼續擴展。
    初始時,ret 為 1,因為至少會有一個子字符串。

復雜度

  • 時間復雜度: O ( N ) O(N) O(N), N為字符串長度。遍歷字符串一次,Arrays.fill 操作作用于固定大小 (26) 的數組,是 O ( 1 ) O(1) O(1) 操作。
  • 空間復雜度: O ( N ) O(N) O(N)

Code

class Solution {public int partitionString(String ss) {char[] s = ss.toCharArray();int[] map = new int[26];int ret = 1;for (char c : s) {if (++map[c - 'a'] > 1) {ret++;Arrays.fill(map, 0);map[c - 'a']++;}}return ret;}
}

2294. 劃分數組使最大差為 K

題目
在這里插入圖片描述

思路

貪心

解題過程

想要獲得最少的子序列(子數組在題目中指子序列,因為元素順序可以打亂后分組),我們就希望每個子序列盡可能包含更多的元素,同時滿足最大差不超過 K 的條件。

  1. 對數組 nums進行排序。這樣,具有相似數值的元素會聚集在一起。
  2. 初始化子序列數量 ret = 1(因為至少有一個子序列)。
  3. 將排序后數組的第一個元素設為當前子序列的最小值 minVal
  4. 遍歷排序后的數組,從第二個元素開始。對于每個元素 x
    • 如果 x - minVal > k,則當前元素 x 不能包含在當前子序列中。因此,我們必須開始一個新的子序列。讓 ret 增加,并將 minVal 更新為當前元素 x(它將是新子序列的第一個也是最小的元素)。
    • 如果 x - minVal <= k,則當前元素 x 可以包含在當前子序列中,我們繼續。minVal 保持不變,因為它是當前子序列的固定最小值。
      為什么可以排序?我們關心的是子序列里的最大值和最小值的差值,這和原始順序無關。題目要求返回的是最少子序列的個數,而不是子序列本身。所以可以排序。

復雜度

  • 時間復雜度: O ( N log ? N ) O(N \log N) O(NlogN), 主要由排序決定。遍歷是 O ( N ) O(N) O(N)
  • 空間復雜度: O ( log ? N ) O(\log N) O(logN) or O ( 1 ) O(1) O(1), 取決于排序算法實現所使用的棧空間或是否為原地排序。Java的Arrays.sort()對于基本類型數組通常是快速排序的變體,會使用 O ( log ? N ) O(\log N) O(logN) 的棧空間。

Code

class Solution {public int partitionArray(int[] nums, int k) {if (nums == null || nums.length == 0) {return 0;}Arrays.sort(nums);int ret = 1;int minVal = nums[0]; for (int x : nums) {if (x - minVal > k) {ret++;minVal = x; }}return ret;}
}

154. 尋找旋轉排序數組中的最小值 II

題目
在這里插入圖片描述

這是第二次寫這道題,這次寫的還不錯,就不再多說了,詳細題解見每日算法-250415

Code

class Solution {public int findMin(int[] nums) {int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == nums[right]) {right--;} else if (nums[mid] > nums[right]) {left = mid + 1;} else {right = mid;}}return nums[left];}
}

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

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

相關文章

Keepalived + LVS + Nginx 實現高可用 + 負載均衡

目錄 Keepalived Keepalived 是什么&#xff08;高可用&#xff09; 安裝 Keepalived LVS LVS 是什么&#xff08;負載均衡&#xff09; 安裝 LVS Keepalived LVS Nginx 實現 高可用 負載均衡 Keepalived Keepalived 是什么&#xff08;高可用&#xff09; Keepaliv…

【雜談】-DeepSeek-GRM:讓AI更高效、更普及的先進技術

DeepSeek-GRM&#xff1a;讓AI更高效、更普及的先進技術 文章目錄 DeepSeek-GRM&#xff1a;讓AI更高效、更普及的先進技術1、DeepSeek-GRM&#xff1a;先進的AI框架解析2、DeepSeek-GRM&#xff1a;AI開發的變革之力3、DeepSeek-GRM&#xff1a;廣泛的應用前景4、企業自動化解…

【MySQL】頁結構詳解:頁的大小、分類、頭尾信息、數據行、查詢、記錄及數據頁的完整結構

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

【FreeRTOS】基于G431+Cubemx自用筆記

系列文章目錄 留空 文章目錄 系列文章目錄前言一、從頭開始創建一個FreeRTOS工程1.1 在 "Timebase Source" 中&#xff0c;選擇其他TIM1.2 配置FreeRTOS的參數1. 3 添加任務 二、動態任務的創建/刪除2.1 函數介紹2.1.1 創建動態任務xTaskCreate()2.1.2 創建靜態任務…

LVGL(lv_bar進度條)

文章目錄 一、lv_bar 是什么&#xff1f;二、基本使用創建一個進度條設置進度值 三、條形方向與填充方向四、范圍模式&#xff08;Range&#xff09;五、事件處理&#xff08;可選&#xff09;六、自定義樣式&#xff08;可選&#xff09;七、綜合示例八、配合 lv_timer 或外部…

AI對話小技巧

角色設定&#xff1a;擅于使用 System 給 GPT 設定角色和任務&#xff0c;如“哲學大師"指令注入&#xff1a;在 System 中注入常駐任務指令&#xff0c;如“主題創作"問題拆解&#xff1a;將復雜問題拆解成的子問題&#xff0c;分步驟執行&#xff0c;如&#xff1a…

C++ 核心基礎:數字、數組、字符串、指針與引用詳解

C++ 核心基礎:數字、數組、字符串、指針與引用詳解 1. C++ 基礎語法1.1 標識符與保留字1.2 數據類型概述1.3 基本輸入輸出2.1 基本整數類型(int、short、long、long long)2.2 無符號整數類型(unsigned int、unsigned short、unsigned long、unsigned long long)2.3 整數類…

HarmonyOS運動開發:如何集成百度地圖SDK、運動跟隨與運動公里數記錄

前言 在開發運動類應用時&#xff0c;集成地圖功能以及實時記錄運動軌跡和公里數是核心需求之一。本文將詳細介紹如何在 HarmonyOS 應用中集成百度地圖 SDK&#xff0c;實現運動跟隨以及運動公里數的記錄。 一、集成百度地圖 SDK 1.引入依賴 首先&#xff0c;需要在項目的文…

如何理解k8s中的controller

一、基本概念 在k8s中&#xff0c;Controller&#xff08;控制器&#xff09;是核心組件之一&#xff0c;其負責維護集群狀態并確保集群內的實際狀態與期望狀態一致的一類組件。控制器通過觀察集群的當前狀態并將其與用戶定義的期望狀態進行對比&#xff0c;做出相應的調整來實…

《Go小技巧易錯點100例》第三十二篇

本期分享&#xff1a; 1.sync.Map的原理和使用方式 2.實現有序的Map sync.Map的原理和使用方式 sync.Map的底層結構是通過讀寫分離和無鎖讀設計實現高并發安全&#xff1a; 1&#xff09;雙存儲結構&#xff1a; 包含原子化的 read&#xff08;只讀緩存&#xff0c;無鎖快…

【MySQL】行結構詳解:InnoDb支持格式、如何存儲、頭信息區域、Null列表、變長字段以及與其他格式的對比

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

LabVIEW多通道并行數據存儲系統

在工業自動化監測、航空航天測試、生物醫學信號采集等領域&#xff0c;常常需要對多個傳感器通道的數據進行同步采集&#xff0c;并根據后續分析需求以不同采樣率保存特定通道組合。傳統單線程數據存儲方案難以滿足實時性和資源利用效率的要求&#xff0c;因此設計一個高效的多…

【Linux系列】bash_profile 與 zshrc 的編輯與加載

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

針對Mkdocs部署到Githubpages加速訪問速度的一些心得

加速網站訪問的一些心得 在使用 MkDocs 構建網站時&#xff0c;為了提高訪問速度&#xff0c;我們可以采取以下一些措施&#xff1a; 1. 優化圖片 使用合適的圖片格式&#xff0c;如 WebP、JPEG2000 等&#xff0c;減少圖片文件大小&#xff0c;從而加快加載速度。 可以使用…

Mysql中切割字符串作為in的查詢條件

問題&#xff1a;需要將一個字符串切割成數組作為in的查詢條件&#xff0c;如&#xff1a; select * from table_1 where name in (select slit(names) from table_2 where id 3); names 返回的格式是’name1,name2,name3…,需要將name按照逗號切割作為in的查詢條件&#xff1b…

云計算中的虛擬化:成本節省、可擴展性與災難恢復的完美結合

云計算中虛擬化的 4 大優勢 1. 成本效益 從本質上講&#xff0c;虛擬化最大限度地減少了硬件蔓延。團隊可以將多個虛擬機整合到單個物理主機上&#xff0c;而不是為每個工作負載部署單獨的服務器。這大大減少了前期硬件投資和持續維護。 結果如何&#xff1f;更低的功耗、更低…

Linux : 多線程【線程概念】

Linux &#xff1a; 多線程【線程概念】 &#xff08;一&#xff09;線程概念線程是什么用戶層的線程linux中PID與LWP的關系 (二) 進程地址空間頁表(三) 線程總結線程的優點線程的缺點線程異常線程用途 &#xff08;一&#xff09;線程概念 線程是什么 在一個程序里的一個執行…

IDEA轉戰TREA AI IDE : springboot+maven+vue項目配置

一、trea下載安裝 Trae官方網址&#xff1a; https://www.trae.com.cn/ Trae官方文檔&#xff1a;https://docs.trae.com.cn/docs/what-is-trae?_langzh w3cschool&#xff1a; https://www.w3cschool.cn/traedocs/ai-settings.html 安裝這里省略&#xff0c;正常安裝即可。…

Java--圖書管理系統(簡易版)

目錄 目錄 前言 &#x1f514;1.library包 1.1 Book類 1.2 BookList類 &#x1f514;2.user包 2.1User類(父類) 2.2Admin(管理員) 2.3 NormalUser(普通用戶) &#x1f514;3.Operation包 &#x1f550;3.1 IOperation接口 &#x1f551;3.2ListOperation(查看操作)…

深入淺出:Spring Boot 中 RestTemplate 的完整使用指南

在分布式系統開發中&#xff0c;服務間通信是常見需求。作為 Spring 框架的重要組件&#xff0c;RestTemplate 為開發者提供了簡潔優雅的 HTTP 客戶端解決方案。本文將從零開始講解 RestTemplate 的核心用法&#xff0c;并附贈真實地圖 API 對接案例。 一、環境準備 在 Spring…