每日算法刷題Day19 5.31:leetcode二分答案3道題,用時1h

6. 475.供暖器(中等,學習check函數雙指針思想)

475. 供暖器 - 力扣(LeetCode)

思想

1.冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。在加熱器的加熱半徑范圍內的每個房屋都可以獲得供暖。現在,給出位于一條水平線上的房屋 houses 和供暖器 heaters 的位置,請你找出并返回可以覆蓋所有房屋的最小加熱半徑。
2.單調性檢驗:加熱半徑越小,越可能不能覆蓋所有房屋,不滿足條件,所以存在一個最小加熱半徑
3.難點在于check函數怎么寫,我原來的思想是遍歷heaters,然后把[heaters[i]-x,heaters[i]+x]變為true,但這樣會超出內存限制
4.學習:
(1)先將houses和heaters進行排序(最重要)
(2)讓i指向當前判斷房屋houses[i],然后j指向可能(先確保右邊界成立) 覆蓋到的heaters[j],x為加熱半徑

  • 當且僅當heaters[j]+x<houses[i]時,第i個房屋必定不能被第j個加熱器覆蓋,然j自增
  • 退出循環說明找到合適的j(右邊界必然成立,找到能覆蓋的最小加熱器),再判斷heaters[j]-x<=houses[i]<=heaters[j]+x是否滿足
代碼

c++:

class Solution {
public:bool check(vector<int>& houses, vector<int>& heaters, int mid) {int n = houses.size(), m = heaters.size();int j = 0;for (int i = 0; i < n; ++i) {while (j < m && houses[i] > heaters[j] + mid)++j; // 尋找能覆蓋的最小加熱器if (j < m && heaters[j] - mid <= houses[i] &&houses[i] <= heaters[j] + mid)continue; // 滿足條件看下一個房子return false; // 不滿足條件}return true;}int findRadius(vector<int>& houses, vector<int>& heaters) {int res = 0;sort(houses.begin(), houses.end());sort(heaters.begin(), heaters.end());int maxho = INT_MIN, minho = INT_MAX, maxhe = INT_MIN, minhe = INT_MAX;for (const int x : houses) {maxho = max(maxho, x);minho = min(minho, x);}for (const int x : heaters) {maxhe = max(maxhe, x);minhe = min(minhe, x);}int left = 0, right = max(abs(maxho - minhe), abs(maxhe - minho));while (left <= right) {int mid = left + ((right - left) >> 1);if (check(houses, heaters, mid)) {res = mid;right = mid - 1;} elseleft = mid + 1;}return res;}
};
7. 2594.修車的最少時間(中等)

2594. 修車的最少時間 - 力扣(LeetCode)

思想

1.給你一個整數數組 ranks ,表示一些機械工的 能力值 。ranksi 是第 i 位機械工的能力值。能力值為 r 的機械工可以在 r * n2 分鐘內修好 n 輛車。同時給你一個整數 cars ,表示總共需要修理的汽車數目。請你返回**修理所有汽車(條件) ** 最少 需要多少時間(答案)
2.類似于3296.移山所需的最少秒數
3.單調性檢驗,時間越少,越不可能修理所有汽車,所以存在一個最少時間

代碼

c++:

class Solution {
public:bool check(vector<int>& ranks, int cars, long long mid) {long long sum = 0;for (const int x : ranks) {sum += (long long)sqrt(mid / x);if (sum >= cars)return true;}return false;}long long repairCars(vector<int>& ranks, int cars) {long long res = 0;int minval = INT_MAX;for (const int x : ranks)minval = min(minval, x);long long left = 1, right = 1LL * minval * cars * cars;while (left <= right) {long long mid = left + ((right - left) >> 1);if (check(ranks, cars, mid)) {res = mid;right = mid - 1;} elseleft = mid + 1;}return res;}
};

1.不用轉換為long long的,可以寫成1LL

8. 1482.制作m束花所需的最少天數

1482. 制作 m 束花所需的最少天數 - 力扣(LeetCode)

思想

1.給你一個整數數組 bloomDay,以及兩個整數 mk 。現需要制作 m 束花。制作花束時,需要使用花園中 相鄰的 k 朵花(小條件) 。花園中有 n 朵花,第 i 朵花會在 bloomDay[i] 時盛開,恰好可以用于 一束 花中。請你返回從花園中摘 m 束花(條件) 需要等待的最少的天數(答案)。如果不能摘到 m 束花則返回 -1
2.單調性檢驗:天數越少,越不能摘到m束花,所以存在一個最少天數

代碼

c++:

class Solution {
public:bool check(vector<int>& bloomDay, int m, int k, int mid) {int n = bloomDay.size();int sum = 0, cnt = 0;for (int i = 0; i < n; ++i) {if (bloomDay[i] <= mid) {++cnt;if (cnt == k) {++sum;if (sum >= m)return true;cnt = 0;}} else {cnt = 0;}}return false;}int minDays(vector<int>& bloomDay, int m, int k) {int res = -1;int maxval = INT_MIN;for (const int x : bloomDay)maxval = max(maxval, x);int left = 1, right = maxval;while (left <= right) {int mid = left + ((right - left) >> 1);if (check(bloomDay, m, k, mid)) {res = mid;right = mid - 1;} elseleft = mid + 1;}return res;}
};

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

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

相關文章

【計算機網絡】第2章:應用層—應用層協議原理

目錄 1. 網絡應用的體系結構 2. 客戶-服務器&#xff08;C/S&#xff09;體系結構 3. 對等體&#xff08;P2P&#xff09;體系結構 4. C/S 和 P2P 體系結構的混合體 Napster 即時通信 5. 進程通信 6. 分布式進程通信需要解決的問題 7. 問題1&#xff1a;對進程進行編址…

PHP+MySQL開發語言 在線下單訂水送水小程序源碼及搭建指南

隨著互聯網技術的不斷發展&#xff0c;在線下單訂水送水服務為人們所需要。分享一款 PHP 和 MySQL 搭建一個功能完善的在線訂水送水小程序源碼及搭建教程。這個系統將包含用戶端和管理端兩部分&#xff0c;用戶可以在線下單、查詢訂單狀態&#xff0c;管理員可以處理訂單、管理…

vBulletin未認證API方法調用漏洞(CVE-2025-48827)

免責聲明 本文檔所述漏洞詳情及復現方法僅限用于合法授權的安全研究和學術教育用途。任何個人或組織不得利用本文內容從事未經許可的滲透測試、網絡攻擊或其他違法行為。使用者應確保其行為符合相關法律法規,并取得目標系統的明確授權。 對于因不當使用本文信息而造成的任何直…

計算機模擬分子合成有哪些應用軟件?

參閱&#xff1a;Top 創新大獎 以下是用于計算機模擬分子合成&#xff08;包括逆合成設計、分子對接、分子動力學模擬及綜合設計平臺&#xff09;的主流應用軟件分類總結&#xff0c;結合其核心功能和應用場景進行整理&#xff1a; &#x1f52c; 一、逆合成設計與路線規劃軟件…

Excel 中的SUMIFS用法(基礎版),重復項求和

1. 首先復制篩選條件所在的列&#xff0c;去除重復項目 數據 》重復項 》刪除重復項 2. 輸入函數公式 SUMIFS(C:C,A:A,E2) 3. 選中單元格&#xff0c;通過 ShiftF3 查看函數參數 第一個參數&#xff1a;求和區域&#xff0c;要累加的值所在的區域范圍 第二個參數&#xff1a…

【xmb】內部文檔148344597

基于小米CyberDog 2的自主導航與視覺感知系統設計報告 摘要&#xff1a; 本文針對2025年全國大學生計算機系統能力大賽智能系統創新設計賽&#xff08;小米杯&#xff09;初賽要求&#xff0c;設計并實現了基于小米仿生四足機器人CyberDog 2的平臺系統方案。參賽作品利用Cyber…

從零開始理解機器學習:知識體系 + 核心術語詳解

你可能聽說過“機器學習”&#xff0c;覺得它很神秘&#xff0c;像是讓電腦自己學會做事。其實&#xff0c;機器學習的本質很簡單&#xff1a;通過數據來自動建立規則&#xff0c;從而完成預測或決策任務。 這篇文章將帶你系統梳理機器學習的知識體系&#xff0c;并用貼近生活…

springboot集成websocket給前端推送消息

一般通常情況下&#xff0c;我們都是前端主動朝后端發送請求&#xff0c;那么有沒有可能&#xff0c;后端主動給前端推送消息呢&#xff1f;這時候就可以借助websocket來實現。下面給出一個簡單的實現樣例。 首先創建一個websocketDemo工程&#xff0c;該工程的整體結構如下&a…

【清晰教程】查看和修改Git配置情況

目錄 查看安裝版本 查看特定配置 查看全局配置 查看本地倉庫配置 設置或修改配置 查看安裝版本 打開命令行工具&#xff0c;通過version命令檢查Git版本號。 git --version 如果顯示出 Git 的版本號&#xff0c;說明 Git 已經成功安裝。 查看特定配置 如果想要查看特定…

【Github/Gitee Webhook觸發自動部署-Jenkins】

Github/Gitee Webhook觸發自動部署-Jenkins #mermaid-svg-hRyAcESlyk5R2rDn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hRyAcESlyk5R2rDn .error-icon{fill:#552222;}#mermaid-svg-hRyAcESlyk5R2rDn .error-tex…

C語言數據結構-鏈式棧

頭文件&#xff1a;stack.h #ifndef __STACK_H__ #define __STACK_H__ #include <stdio.h> #include <stdlib.h> typedef int DataType; /* 鏈式棧節點類型 */ typedef struct staNode { DataType data; struct staNode *pNext; }StackNode; /* 鏈式棧…

M4Pro安裝ELK(ElasticSearch+LogStash+Kibana)踩坑記錄

ElasticSearch安裝&#xff0c;啟動端口9200&#xff1a; docker pull elasticsearch:8.13.0 新增配置文件elasticsearch.yml&#xff1a; cd /opt/homebrew/etc/ mkdir elasticsearch_config cd elasticsearch_config vi elasticsearch.yml cluster.name: "nfturbo…

uni-app學習筆記十六-vue3頁面生命周期(三)

uni-app官方文檔頁面生命周期部分位于頁面 | uni-app官網。 本篇再介紹2個生命周期 1.onUnload&#xff1a;用于監聽頁面卸載。 當頁面被關閉時&#xff0c;即頁面的緩存被清掉時觸發加載onUnload函數。 例如:在demo6頁面點擊跳轉到demo4&#xff0c;在demo4頁面回退不了到d…

Java互聯網大廠面試:從Spring Boot到Kafka的技術深度探索

Java互聯網大廠面試&#xff1a;從Spring Boot到Kafka的技術深度探索 在某家互聯網大廠的面試中&#xff0c;面試官A是一位技術老兵&#xff0c;而被面試者謝飛機&#xff0c;號稱有豐富的Java開發經驗。以下是他們的面試情景&#xff1a; 場景&#xff1a;電商平臺的后端開發…

機器學習算法——KNN

一、KNN算法簡介 1.KNN思想 &#xff08;1&#xff09;K-近鄰算法 根據你的“鄰居”來推斷你是什么類別 KNN算法思想&#xff1a;如果一個樣本在特征空間&#xff08;訓練集&#xff09;中的k個最相似的樣本中的大多數屬于某一個類別。則該樣本也屬于這個類別 &#xff08…

如何評估CAN總線信號質量

CAN總線網絡的性能在很大程度上取決于其信號質量。信號質量差可能導致通信錯誤&#xff0c;進而引發系統故障、效率降低甚至安全隱患。因此&#xff0c;評估和確保CAN總線信號質量是維護系統健康和可靠性的關鍵。 在CAN總線網絡中&#xff0c;數據通過雙絞線上的差分信號傳輸。…

封裝一個小程序選擇器(可多選、單選、搜索)

組件 <template><view class"popup" v-show"show"><view class"bg" tap"cancelMultiple"></view><view class"selectMultiple"><view class"multipleBody"><view class&…

2.1HarmonyOS NEXT開發工具鏈進階:DevEco Studio深度實踐

HarmonyOS NEXT開發工具鏈進階&#xff1a;DevEco Studio深度實踐 在HarmonyOS NEXT全棧自研的技術體系下&#xff0c;DevEco Studio作為一站式開發平臺&#xff0c;通過深度整合分布式開發能力&#xff0c;為開發者提供了從代碼編寫到多端部署的全流程支持。本章節將圍繞多設…

LLMs之Tool:Workflow Use的簡介、特點、安裝和使用方法、以及案例應用

LLMs之Tool&#xff1a;Workflow Use的簡介、特點、安裝和使用方法、以及案例應用 目錄 Workflow Use的簡介 1、Workflow Use的特點 2、Workflow Use的愿景和路線圖 Workflow Use的安裝和使用方法 1、安裝 2、使用方法 查看所有命令 從 Python 中使用&#xff1a; 啟動…

二分法算法技巧-思維提升

背景&#xff1a; 在寫力扣題目“搜素插入位置 ”時&#xff0c;發現二分法的一個細節點&#xff0c;打算記錄下來&#xff0c;先看一張圖&#xff1a; 我們知道&#xff0c;排序數組&#xff0c;更高效的是二分查找法~~~而二分法就是切割中間&#xff0c;定義left是最開始的&…