【貪心算法】貪心算法六

貪心算法六

  • 1.壞了的計算器
  • 2.合并區間
  • 3.無重疊區間
  • 4.用最少數量的箭引爆氣球

在這里插入圖片描述

點贊????收藏????關注????
你的支持是對我最大的鼓勵,我們一起努力吧!????

1.壞了的計算器

題目鏈接: 991. 壞了的計算器

題目分析:

在這里插入圖片描述

算法原理:

解法一:正向推導

以3轉化成10為例,我們正向推導有兩個操作x2,-1。

此時拿到3要么x2,要么-1,此時我們有一個小貪心的想法,為了更快到達,所以選擇x2,得到6,這里也有兩種選擇要么x2,要么-1,如果延續剛才的貪心我們會x2,得到12,此時12比10大了,我們只能執行-1操作,得到11,再執行依次-1操作得到10,這里我們共進行了4次操作

在這里插入圖片描述

但是我們發現如果再6的時候,不去x2,而去-1,得到5,然后在去x2,就得到10,總共才3次操作,反而比剛才的小貪心更優。

在這里插入圖片描述
所以說在面臨一個數的時候,是x2 還是 -1操作,判斷標準其實是依賴后面的數來判斷前面是x2還是-1好。所以說如果正向推導有點難,我們可以嘗試另一個思路。

解法二:正難則反

我們這道題明顯可能反著來做,x2和-1 操作 可以變成/2和+1 操作。所以說我們能正向從3推導到10,那肯定能逆向推導回去。

在這里插入圖片描述

假設我們要從end轉化成begin(10 -> 3)

正著難推導,難道逆著就好推導嗎?確實是的,原因就在于這里/2操作,別忘了我們這道題是沒有小數的,沒有小數,那誰才能執行/2操作?那肯定是偶數,偶數/2能除盡,奇數/2除不盡。

所以面對奇數的時候只能執行+1操作,面對偶數我們在分情況討論是/2還是+1。

在這里插入圖片描述

  1. end <= begin

奇數依舊+1,當end <= begin的時候,偶數此時就沒有必要執行/2操作。因為此時end都比begin小了難道你要/2之后在加1嗎?那不如直接加1好了。所以end <= begin,奇數+1,偶數+1,而且這個+1操作也不用一次一次算,我們僅需 begin - end就得到要執行幾次+1了。

在這里插入圖片描述

  1. end > begin

奇數依舊+1,偶數要么/2,要么+1,此時這里我們有一個小貪心,因為end大于begin,我們想最少操作次數到達begin所以我們看似選擇/2是更優的。

那這個貪心的想法對不對呢?

在這里插入圖片描述
我們證明一下先除更優。

假設x是個偶數,并且大于begin。
如果不執行/2操作,而執行+1操作,那會得到一個奇數,但是奇數只能加1,然后又變成偶數了,又執行+1操作,又變成奇數,奇數只能+1,又變成偶數了。假設x一共加了k個1。這個k也是個偶數,如果k是奇數接下來還要+1總歸要把它先加成一個偶數才行。

x + k 是大于 begin,必然會執行一次 / 2操作,你想把大的數變成小的數不執行除法操作怎么才能變小呢?所以無論加上多少1最終都會執行一次/2操作,變成(x+k)/2,次數這種操作執行的次數就是 k + 1次

在這里插入圖片描述
但是如果拿x這個數變成(x+k)/2,先執行/2操作變成 x/2,然后僅需在x/2的基礎上加上k/2,就得到(x+k)/2,這種執行操作次數是 1 + k/2次,是比上面執行次數小的。

在這里插入圖片描述

所以說當 end > begin ,面對偶數我們也不需要分類討論,僅需執行/2操作。奇數+1,偶數/2,一直到end <= begin的時候,執行begin - end就可以得到整個操作次數。

在這里插入圖片描述

class Solution {
public:int brokenCalc(int startValue, int target) {// 正難則反 + 貪心int ret = 0;while(target > startValue){if(target % 2) target++;else target /= 2;++ret;}return ret + startValue - target;}
};

2.合并區間

題目鏈接: 56. 合并區間

題目分析:

在這里插入圖片描述

給一個二維矩陣,每一行表示一個區間,里面有兩個元素第一個表示左端點,第二個表示右端點,請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。

有重疊的部分合并相當于就是求并集。注意示例2這個特殊的情況[1,4]和[4,5]也需要合并,也就是僅有一個點重疊也是可以合并。

在這里插入圖片描述

算法原理:

關于貪心里面的區間問題的解法,我們都是固定的解法。

  1. 排序
  2. 根據排序后的結果,總結出一些規律,進而得出解決這個問題的策略

關于第2點也可以先提出一個解決問題的策略,進而總結出一些規律。

關于第1點排序,是分為兩大類的,其中第一類是按照左

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

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

相關文章

直播預約 | CATIA MODSIM SmartCAE帶練營第3期:讓每輪設計迭代都快人一步!

▼▼免費報名鏈接▼▼ 達索系統企業數字化轉型在線研討會https://3ds.tbh5.com/EventDetail.aspx?eid1195&frpt 迅筑官網 ??

OSI參考模型TCP/IP模型 二三事

計算機網絡的學習離不開OSI參考模型&TCP/IP模型對各層功能與任務的了解就是學習的主要內容其二者的區別也是我們應該了解的其中 擁塞控制和流量控制 就是各層功能中 兩個易混淆的概念流量控制&#xff08;Flow Control&#xff09;&#xff1a;解決的是發送方和接收方之間速…

DataStream實現WordCount

目錄讀取文本數據讀取端口數據事實上Flink本身是流批統一的處理架構&#xff0c;批量的數據集本質上也是流&#xff0c;沒有必要用兩套不同的API來實現。所以從Flink 1.12開始&#xff0c;官方推薦的做法是直接使用DataStream API&#xff0c;在提交任務時通過將執行模式設為BA…

imx6ull-驅動開發篇37——Linux MISC 驅動實驗

目錄 MISC 設備驅動 miscdevice結構體 misc_register 函數 misc_deregister 函數 實驗程序編寫 修改設備樹 驅動程序編寫 miscbeep.c miscbeepApp.c Makefile 文件 運行測試 MISC 驅動也叫做雜項驅動&#xff0c;也就是當某些外設無法進行分類的時候就可以使用 MISC…

C# 項目“交互式展廳管理客戶端“針對的是“.NETFramework,Version=v4.8”,但此計算機上沒有安裝它。

C# 項目“交互式展廳管理客戶端"針對的是".NETFramework,Versionv4.8”&#xff0c;但此計算機上沒有安裝它。 解決方法&#xff1a; C# 項目“交互式展廳管理客戶端"針對的是".NETFramework,Versionv4.8”&#xff0c;但此計算機上沒有安裝它。 下載地址…

FFmpeg及 RTSP、RTMP

FFmpeg 是一個功能強大的跨平臺開源音視頻處理工具集 &#xff0c;集錄制、轉碼、編解碼、流媒體傳輸等功能于一體&#xff0c;被廣泛應用于音視頻處理、直播、點播等場景。它支持幾乎所有主流的音視頻格式和協議&#xff0c;是許多媒體軟件&#xff08;如 VLC、YouTube、抖音等…

金山辦公的服務端開發工程師-25屆春招筆試編程題

1.作弊 溪染&#xff1a;六王畢&#xff0c;四海一&#xff1b;蜀山兀&#xff0c;阿房出。覆壓三百余里&#xff0c;隔離天日。驪山北構而西折&#xff0c;直走咸陽。二川溶溶&#xff0c;流入宮墻。五步一樓&#xff0c;十步一閣&#xff1b;廊腰縵回&#xff0c;檐牙高啄&am…

注意力機制中為什么q與k^T相乘是注意力分數

要理解 “qkT\mathbf{q} \times \mathbf{k}^TqkT 是注意力分數”&#xff0c;核心是抓住注意力機制的本質目標 ——量化 “查詢&#xff08;q&#xff09;” 與 “鍵&#xff08;k&#xff09;” 之間的關聯程度&#xff0c;而向量點積&#xff08;矩陣相乘的元素本質&#xff…

Krea Video:Krea AI推出的AI視頻生成工具

本文轉載自&#xff1a;Krea Video&#xff1a;Krea AI推出的AI視頻生成工具 - Hello123工具導航 ** 一、平臺定位與技術特性 Krea Video 是 Krea AI 推出的 AI 視頻生成工具&#xff0c;通過結合關鍵幀圖像與文本提示實現精準視頻控制。用戶可自定義視頻首尾幀、為每張圖片設…

C++初階(2)C++入門基礎1

C是在C的基礎之上&#xff0c;容納進去了面向對象編程思想&#xff0c;并增加了許多有用的庫&#xff0c;以及編程范式 等。熟悉C語言之后&#xff0c;對C學習有一定的幫助。 本章節主要目標&#xff1a; 補充C語言語法的不足&#xff0c;以及C是如何對C語言設計不合理的地方…

ANSI終端色彩控制知識散播(II):封裝的層次(Python)——不同的邏輯“一樣”的預期

基礎高階各有色&#xff0c;本原純真動乾坤。 筆記模板由python腳本于2025-08-22 18:05:28創建&#xff0c;本篇筆記適合喜歡終端色彩ansi編碼和python的coder翻閱。 學習的細節是歡悅的歷程 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述…

前端無感刷新 Token 的 Axios 封裝方案

在現代前端應用中&#xff0c;基于 Token 的身份驗證已成為主流方案。然而&#xff0c;Token 過期問題常常困擾開發者 —— 如何在不打斷用戶操作的情況下自動刷新 Token&#xff0c;實現 "無感刷新" 體驗&#xff1f;本文將詳細介紹基于 Axios 的解決方案。什么是無…

【數據結構】線性表——鏈表

這里寫自定義目錄標題線性表鏈表&#xff08;鏈式存儲&#xff09;單鏈表的定義單鏈表初始化不帶頭結點的單鏈表初始化帶頭結點的單鏈表初始化單鏈表的插入按位序插入帶頭結點不帶頭結點指定結點的后插操作指定結點的前插操作單鏈表的刪除按位序刪除&#xff08;帶頭結點&#…

容器安全實踐(三):信任、約定與“安全基線”鏡像庫

容器安全實踐&#xff08;一&#xff09;&#xff1a;概念篇 - 從“想當然”到“真相” 容器安全實踐&#xff08;二&#xff09;&#xff1a;實踐篇 - 從 Dockerfile 到 Pod 的權限深耕 在系列的前兩篇文章中&#xff0c;我們探討了容器安全的底層原理&#xff0c;并詳細闡述…

百度面試題:賽馬問題

題目現在有25匹馬和一個賽馬場&#xff0c;賽馬場有5條跑道&#xff08;即一次只能比較5匹馬&#xff09;&#xff0c;并且沒有秒表等計時工具&#xff0c;因此每次賽馬只能知道這5匹馬的相對時間而非絕對時間。問&#xff1a;如何篩選出跑的最快的3匹馬&#xff1f;需要比賽幾…

centos下安裝Nginx(搭建高可用集群)

CentOS-7下安裝Nginx的詳細過程_centos7安裝nginx-CSDN博客 centos換yum軟件管理包鏡像 CentOS 7.* 更換國內鏡像源完整指南_centos7更換國內源-CSDN博客 VMware虛擬機上CentOS配置nginx后,本機無法訪問 執行命令&#xff1a;/sbin/iptables -I INPUT -p tcp --dport 80 -j…

實時視頻技術選型深度解析:RTSP、RTMP 與 WebRTC 的邊界

引言&#xff1a;WebRTC 的“光環”與現實落差 在實時音視頻領域&#xff0c;WebRTC 常常被貼上“終極解決方案”的標簽&#xff1a;瀏覽器原生支持、無需插件、點對點傳輸、毫秒級延遲&#xff0c;這些特性讓它在媒體和開發者群體中擁有了近乎神話般的地位。許多人甚至認為&a…

基于深度學習的阿爾茨海默癥MRI圖像分類系統

基于深度學習的阿爾茨海默癥MRI圖像分類系統 項目概述 阿爾茨海默癥是一種進行性神經退行性疾病&#xff0c;早期診斷對于患者的治療和生活質量至關重要。本項目利用深度學習技術&#xff0c;基于MRI腦部掃描圖像&#xff0c;構建了一個高精度的阿爾茨海默癥分類系統&#xff0…

54 C++ 現代C++編程藝術3-移動構造函數

C 現代C編程藝術3-移動構造函數 文章目錄C 現代C編程藝術3-移動構造函數場景1&#xff1a;動態數組資源轉移 #include <iostream> #include <vector> class DynamicArray { int* data; size_t size; public: // 移動構造函數&#xff08;關鍵實現&#xf…

Sping Boot + RabbitMQ :如何在Spring Boot中整合RabbitMQ實現消息可靠投遞?

Spring Boot整合RabbitMQ實現消息可靠投遞全解析 在分布式系統中&#xff0c;消息中間件是解耦、異步、流量削峰的核心組件。RabbitMQ作為高可靠、易擴展的AMQP協議實現&#xff0c;被廣泛應用于企業級場景。但消息傳遞過程中可能因網絡波動、服務宕機等問題導致消息丟失&#…