代碼隨想錄算法訓練營第二十九天

452. 用最少數量的箭引爆氣球

這道題目我原本的想法是只要當前的氣球半徑范圍在已有的箭頭能夠擊穿的氣球半徑內就可以實現 但是 箭射出去的地方是一個值 而不是一個范圍? 因此有相同的重疊范圍的許多氣球并一定都有相同的值,因此這種方法不可取

這題的主要局部最優就是當氣球出現重疊,一起射,所用弓箭最少。全局最優:把所有氣球射爆所用弓箭最少。然后為了讓氣球盡可能的重疊,需要對數組進行排序

如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要一個弓箭。因此重疊區域的氣球一定要找右邊界的最小值,這樣才能確保所有氣球都能同時被射爆。

完整的代碼如下:

class Solution {
private:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}
public:int findMinArrowShots(vector<vector<int>>& points) {if (points.size() == 0) return 0;sort(points.begin(), points.end(), cmp);int result = 1; // points 不為空至少需要一支箭for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {  // 氣球i和氣球i-1不挨著,注意這里不是>=result++; // 需要一支箭}else {  // 氣球i和氣球i-1挨著points[i][1] = min(points[i - 1][1], points[i][1]); // 更新重疊氣球最小右邊界}}return result;}
};

435. 無重疊區間

這道題有了上道題的基礎就很容易做了 主要循環里判斷是否當前元素的左邊界是否小于上一個的右邊界,然后右邊界更新為當前元素和上一個元素最小的右邊界值即可。因為元素的范圍越小重疊的區間的概率就越小。自己的代碼如下:

class Solution {
public:static bool cmp(vector<int>& a, vector<int>& b) {return a[0] < b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size() <= 1) return 0;int result = 0;sort(intervals.begin(), intervals.end(), cmp);for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] < intervals[i-1][1]) {result++;intervals[i][1] = min(intervals[i-1][1], intervals[i][1]);}}return result;}
};

代碼隨想錄里是按右邊界排序的代碼如下:

class Solution {
public:// 按照區間右邊界排序static bool cmp (const vector<int>& a, const vector<int>& b) {return a[1] < b[1];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size() == 0) return 0;sort(intervals.begin(), intervals.end(), cmp);int count = 1; // 記錄非交叉區間的個數int end = intervals[0][1]; // 記錄區間分割點for (int i = 1; i < intervals.size(); i++) {if (end <= intervals[i][0]) {end = intervals[i][1];count++;}}return intervals.size() - count;}
};

763. 劃分字母區間

這道題我想復雜了,因為我想的是這個字母是否出現過,因此接下來就比較麻煩? 但是我也想過先找出每個字母的最長范圍這樣就方便許多了? 但是覺得這樣的操作比較耗時,但是下面這種還好。

        for (int i = 0; i < s.size(); i++) {hash[s[i] - 'a'] = i;}

在遍歷的過程中相當于是要找每一個字母的邊界,如果找到之前遍歷過的所有字母的最遠邊界,說明這個邊界就是分割點了。此時前面出現過所有字母,最遠也就到這個邊界了。

可以分為如下兩步:

  • 統計每一個字符最后出現的位置
  • 從頭遍歷字符,并更新字符的最遠出現下標,如果找到字符最遠出現位置下標和當前下標相等了,則找到了分割點

明白原理之后,代碼并不復雜,如下:

class Solution {
public:vector<int> partitionLabels(string S) {int hash[27] = {0}; // i為字符,hash[i]為字符出現的最后位置for (int i = 0; i < S.size(); i++) { // 統計每一個字符最后出現的位置hash[S[i] - 'a'] = i;}vector<int> result;int left = 0;int right = 0;for (int i = 0; i < S.size(); i++) {right = max(right, hash[S[i] - 'a']); // 找到字符出現的最遠邊界if (i == right) {result.push_back(right - left + 1);left = i + 1;}}return result;}
};

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

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

相關文章

最短路徑算法(算法篇)

算法之最短路徑算法 最短路徑算法 概念&#xff1a; 考查最短路徑問題&#xff0c;可能會輸入一個賦權圖(也就是邊帶有權的圖)&#xff0c;則一條路徑的v1v2…vN的值就是對路徑的邊的權求和&#xff0c;這叫做賦權路徑長&#xff0c;如果是無權路徑長就是單純的路徑上的邊數。…

mac安裝配置cmake

本機是2015 macbook pro mid&#xff0c;已經有點老了&#xff0c;用homebrew下cmake老出問題 其實cmake官網安裝也不麻煩 一、官網下載對應安裝包 Download CMake 和所有dmg文件一樣安裝 二、改成命令行使用 一般來說 tutorial 給的都是命令行build 命令行的設置如下&am…

手機下載APP (uniapp/vue)

一、uniapp <template><view class"content"><view class"appName">{{ formData.appName }}</view><view class"appInfo">{{ formData.appInfo }}</view><image class"logo" :src"formDa…

批量修改Git歷史commit信息中的username

之前很長一段時間GitHub上的提交都在使用工作賬戶, 導致私人倉庫中的提交者比較混亂. 在StackOver里面找到了一個bash腳本可以批量修改username, 在這里記錄一下. 修改的步驟一共兩步: 執行修改腳本將本地修改同步到Git服務器 首先我們來看腳本: #!/bin/shgit filter-branch…

SFUZZ模糊測試平臺全新升級,從標準到實踐助力車企安全出海

開源網安模糊測試平臺SFuzz全新升級&#xff0c;參照各國相關標準要求進行針對性建設&#xff0c;可為智能網聯汽車信息安全測試提供更為強大的工具支持。SFuzz向被測系統輸入大量隨機數據&#xff0c;模擬各種異常情況&#xff0c;可以發現被測系統內潛在的缺陷和漏洞&#xf…

Spring中如何操作Redis

Spring畢竟是Java中的一個主流框架&#xff0c;如何在這個框架中使用Redis呢&#xff1f; 創建項目并引入相關依賴 然后進行創建。 至此就將Redis的相關依賴引入進來了。 編寫Redis配置 將application.properties修改成application.yml 然后編寫如下配置&#xff1a; spr…

usbserver工程師手記(二)設置定時任務

概述 部分銀行ukey 長時間不使用后會導致休眠&#xff0c;出現雖然有連接&#xff0c;但是讀不到證書&#xff0c;可以用定時重置端口的辦法&#xff0c;調用接口 http://ip/usb_server/reset_port,參數為 {"port":"B5-1-2","vid_pid":"09…

Golang | Leetcode Golang題解之第228題匯總區間

題目&#xff1a; 題解&#xff1a; func summaryRanges(nums []int) (ans []string) {for i, n : 0, len(nums); i < n; {left : ifor i; i < n && nums[i-1]1 nums[i]; i {}s : strconv.Itoa(nums[left])if left < i-1 {s "->" strconv.It…

多個標簽頁中復用同一 QTableView

在 PyQt 中實現在多個標簽頁中復用同一個 QTableView 實例&#xff0c;復用同一個 QTableView 實例可以減少內存和資源的使用。每個 QTableView 實例都會消耗一定的內存和處理資源&#xff0c;如果每個標簽頁都創建一個新的實例&#xff0c;會增加系統的負擔。通過復用實例&…

每天一個數據分析題(四百二十一)- 一元線性回歸模型

關于一元線性回歸的求解過程說法正確的是&#xff1f; A.一元線性回歸只需要求解出兩個參數系數即可 B.對于新來的樣例&#xff0c;建立好的一元線性回歸模型可以做出準確的預測 C.一元線性回歸模型的基本形式是YAxe&#xff0c;其中A為系數&#xff0c;e為隨機誤差 D.一元線性…

日常學習-20240710

1、一次一千萬條數據插入和刪除案例&#xff1a; 第一次&#xff1a;插入--批量插入&#xff0c;每次插入5000條數據&#xff0c;總耗時28min,數據無異常 刪除--通過sql語句一次性刪除&#xff0c;總耗時1h52min;一次刪除的數據過多導致mysql的備份恢復文件極其龐大&#xff0…

CentOS7 安裝 git 命令

通過yum源install下載的git版本比較低&#xff0c;不推薦此方式安裝。 官網下載最新版git源碼&#xff1a;Git 1. 解壓安裝包 tar -xzvf git-2.45.2.tar.gz 2. 安裝相關依賴 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils…

uniapp使用高德地圖(公眾號+h5)

選擇微信小程序的話后果就是你的地圖出不來&#xff0c;出來了就報key異常 下面直接放配置和代碼&#xff1a; 打包后的高德uni-app,uniCloud,serverless,高德地圖,申請高德地圖Key,配置使用高德地圖,參數說明,高德開放平臺用戶名,百度地圖,申請百度地圖Key,配置使用百度地圖,…

線性代數|機器學習-P22逐步最小化一個函數

文章目錄 1. 概述2. 泰勒公式3. 雅可比矩陣4. 經典牛頓法4.1 經典牛頓法理論4.2 牛頓迭代法解求方程根4.3 牛頓迭代法解求方程根 Python 5. 梯度下降和經典牛頓法5.1 線搜索方法5.2 經典牛頓法 6. 凸優化問題6.1 約束問題6.1 凸集組合 Mit麻省理工教授視頻如下&#xff1a;逐步…

bert訓練的一些技巧(rand() < self.skipgram_prb)

rand() < self.skip_gram_prb) 是一個條件表達式&#xff0c;用來判斷是否進行skip-gram掩碼操作。這種掩碼操作通常用于自然語言處理中的數據增強&#xff0c;通過概率決定是否應用skip-gram掩碼。下面是對這個表達式的詳細解釋&#xff1a; 解釋 rand(): rand() 是一個隨…

uniapp 初始學習1

uni-app代碼基本包括js,vue,css.在app端支持原生渲染nvue&#xff0c;可編譯的kotlin和swift 掌握js就可以進行不同應用的開發 頁面文件遵循 Vue 單文件組件 (SFC) 規范&#xff0c;即每個頁面是一個.vue文件 .vue文件是一個自定義的文件類型&#xff0c;用類HTML語法描述一…

SpringBoot使用RedisTemplate、StringRedisTemplate操作Redis

前言 RedisTemplate 是 Spring Boot 訪問 Redis 的核心組件&#xff0c;底層通過 RedisConnectionFactory 對多種 Redis 驅動進行集成&#xff0c;上層通過 XXXOperations 提供豐富的 API &#xff0c;并結合 Spring4 基于泛型的 bean 注入&#xff0c;極大的提供了便利&#x…

深度學習和NLP中的注意力和記憶

深度學習和NLP中的注意力和記憶 文章目錄 一、說明二、注意力解決了什么問題&#xff1f;#三、關注的代價#四、機器翻譯之外的關注#五、注意力&#xff08;模糊&#xff09;記憶&#xff1f;# 一、說明 深度學習的最新趨勢是注意力機制。在一次采訪中&#xff0c;現任 OpenAI 研…

使用 python 構建企業級高可用海量爬蟲調度系統

一、引言 在大數據時代&#xff0c;信息的獲取與分析成為了企業決策的重要依據。對于營銷行業而言&#xff0c;實時抓取和分析競爭對手動態、市場趨勢以及用戶反饋等數據&#xff0c;是制定有效策略的關鍵。然而&#xff0c;構建一個高可用的、能夠處理海量數據的爬蟲調度系統…

K8S中部署 Nacos 集群

1. 準備 GitK8Skubectlhelm 咱也沒想到 K8S 部署系列能搞這么多次&#xff0c;我一個開發天天干運維的活&#xff0c;前端后端運維測試工程師實至名歸。 2. 方案選擇 https://github.com/nacos-group/nacos-k8s 我替你們看了一下&#xff0c;有好幾種方式能部署&#xff…