算法訓練營day28 貪心算法②122.買賣股票的最佳時機II、55. 跳躍游戲、 45.跳躍游戲II 、1005.K次取反后最大化的數組和

????????貪心算法第二篇博客!感覺這篇博客中的算法都很巧妙,需要動動腦筋

122.買賣股票的最佳時機II

????????(這道題可以遍歷數組,如果不能遍歷的話,就不能做了,需要注意的是:

  • 只有一只股票!
  • 當前只有買股票或者賣股票的操作

????????所以想獲得利潤至少要兩天為一個交易單元。

????????如果想到其實最終利潤是可以分解的,那么本題就很容易了!——如何分解呢?

  • 假如第 0 天買入,第 3 天賣出,那么利潤為:prices[3] - prices[0]。
  • 相當于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。
  • 此時就是把利潤分解為每天為單位的維度,而不是從 0 天到第 3 天整體去考慮!
  • 那么根據 prices 可以得到每天的利潤序列:(prices[i] - prices[i - 1]).....(prices[1] - prices[0])。

????????可以發現,其實我們需要收集每天的正利潤就可以,收集正利潤的區間,就是股票買賣的區間,而我們只需要關注最終利潤,不需要記錄區間。那么只收集正利潤就是貪心所貪的地方!

????????局部最優:收集每天的正利潤,全局最優:求得最大利潤

class Solution:def maxProfit(self, prices: List[int]) -> int:result = 0for i in range(1, len(prices)):# 左閉右開result += max(prices[i] - prices[i - 1], 0)# 取大于0的利潤累加進結果中return result

55. 跳躍游戲

????????我想的方法:判斷0的個數及0之前的可走長度,如果能跨過則可以通過(太麻煩了)

????????貪心算法:局部最優解:每次取最大跳躍步數(取最大覆蓋范圍),整體最優解:最后得到整體最大覆蓋范圍,看是否能到終點

注釋:引用自《代碼隨想錄》

  • i 每次移動只能在 cover 的范圍內移動,每移動一個元素,cover 得到該元素數值(新的覆蓋范圍)的補充,讓 i 繼續移動下去。
  • 而 cover 每次只取 max(該元素數值補充后的范圍, cover 本身范圍)。
  • 如果 cover 大于等于了終點下標,直接 return true 就可以了。

????????不用拘泥于每次究竟跳幾步,而是看覆蓋范圍,覆蓋范圍內一定是可以跳過來的,不用管是怎么跳的。

class Solution:def canJump(self, nums: List[int]) -> bool:cover = 0if len(nums) == 1:return Truei = 0while i <= cover:cover = max(i + nums[i], cover)if cover >= len(nums) - 1:return Truei += 1return False

45.跳躍游戲II?

????????這里需要統計兩個覆蓋范圍,當前這一步的最大覆蓋和下一步最大覆蓋

? ? ? ? 核心就是這一步的最遠距離沒到終點,才需要加1,繼續下一步的最遠距離……(不斷重復),同時以這一步的最遠距離是否到達終點為判斷條件,來進行加1

? ? ? ? 如何劃分“步”的區間,下一步的區間由上一步區間每個元素統計出的最遠距離而定,區間起點緊鄰上一步

class Solution:def jump(self, nums: List[int]) -> int:if len(nums) == 1:return 0cur_distance = 0 # 當前最遠距離ans = 0 # 記錄步數next_distance = 0 # 下一步覆蓋最遠距離下標for i in range(len(nums)):next_distance = max(nums[i] + i, next_distance)if i == cur_distance:ans += 1 # 需要走下一步cur_distance = next_distance # 規定區間if next_distance >= len(nums) - 1:breakreturn ans

1005.K次取反后最大化的數組和

????????第一眼的想法是:排序,統計負數個數

  • 如果負數個數l 大于等于k,那么將最小的k個數取反
  • 如果負數個數l 小于k,將所有負數取反,同時最小的負數重復取反

bingo!

????????貪心的思路,局部最優:讓絕對值大的負數變為正數,當前數值達到最大,整體最優:整個數組和達到最大。

????????如果將負數都轉變為正數了,K依然大于0,此時的問題是一個有序正整數序列,如何轉變K次正負,讓 數組和 達到最大。

????????那么又是一個貪心:局部最優:只找數值最小的正整數進行反轉,當前數值和可以達到最大(例如正整數數組{5, 3, 1},反轉1 得到-1 比 反轉5得到的-5 大多了),全局最優:整個 數組和 達到最大。

class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(key = lambda x: abs(x), reverse = True)# key是排序函數 如 sorted()、list.sort()的參數, 用于指定每個元素在排序前的轉換規則# lambda x: abs(x) 是一個匿名函數, 它接受參數 x 并返回其絕對值 abs(x)# 作用:排序時將根據元素的絕對值大小進行比較,而非元素本身。# 指定排序結果為降序。若省略該參數,默認升序。# lambda 函數: add = lambda a, b: a + bfor i in range(len(nums)):if nums[i] < 0 and k > 0:nums[i] *= -1k -= 1if k % 2 == 1:nums[-1] *= -1result = sum(nums)return result

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

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

相關文章

NumPy核心操作全攻略

NumPy&#xff08;Numerical Python&#xff09;是 Python 生態中用于科學計算的核心庫&#xff0c;提供高性能的多維數組對象&#xff08;ndarray&#xff09;及相關的數學運算工具。其核心功能圍繞數組操作、線性代數、隨機數生成等&#xff0c;是數據科學、機器學習等領域的…

Redis 主從同步對象模型

淘汰策略 對最外層的key進行淘汰 expire(秒)/pexpire(毫秒) ttlmaxmemory:最大內存的一半(持久化fork()子進程) 數據遷移需要額外的空間 maxmemory-policy 提供淘汰機制 默認不會淘汰 lru 最近最少使用 lfu最近最少頻次 voltaile 對由expire的進行淘汰持久化: fork:寫時復制原理…

C++ 使用 constexpr 、查表法、分治法加速位鏡像翻轉

代碼////// brief 左右翻轉位。////// note 翻轉后&#xff0c;最低位位將變為最高位&#xff0c;最高位將變為最低位。//////template <typename T>requires(std::is_same_v<T, uint8_t>)constexpr T Reverse(T value){int32_t bit_count sizeof(T) * 8;for (int…

知識庫搭建之Meilisearch‘s 搜索引擎 測評-東方仙盟測評師

windows 啟動后 啟動成功后關鍵信息 Config file path: "none" Database path: "./data.ms" Server listening on: "http://localhost:7700" Environment: "development" Commit SHA: &quo…

【筆記】Anaconda 重裝后虛擬環境寫入路徑異常的完整排查與解決過程

Anaconda 安裝[僅為當前用戶安裝/為所有用戶安裝]選項對環境變量設置的影響_anaconda沒有添加環境變量-CSDN博客 Anaconda 路徑治理指南&#xff1a;路徑精簡、權限優化與環境隔離-CSDN博客 Windows系統下手動升級Anaconda的詳細指南_anaconda升級-CSDN博客 Conda 命令大全&…

QuecPython-正則表達式

該模塊通過正則表達式匹配數據。目前支持的操作符較少&#xff0c;部分操作符暫不支持。示例&#xff1a;import ureres $GNRMC,133648.00,A,3149.2969,N,11706.9027,E,0.055,,311020,,,A,V*18 $GNGGA,133648.00,3149.2969,N,11706.9027,E,1,24,1.03,88.9,M,,M,,*6C $GNGLL,3…

QT窗口(3)-狀態欄

QT窗口&#xff08;3&#xff09;-狀態欄 狀態欄 代碼如下&#xff1a;//存在就獲取&#xff0c;不存在就創建QStatusBar*statusBarthis->statusBar();this->setStatusBar(statusBar);//顯示一個臨時消息statusBar->showMessage("這是一個狀態消息");運行結…

更具個性的域名:解鎖互聯網多元價值的鑰匙

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…

深度學習模塊實踐手冊(第十一期)

46、縮放點積注意力模塊論文《Attention Is All You Need》1、作用&#xff1a; 縮放點積注意力&#xff08;Scaled Dot-Product Attention&#xff09;是 Transformer 模型的核心組件&#xff0c;旨在解決序列建模中長距離依賴關系捕捉的問題。傳統的循環神經網絡&#xff08;…

C++高級技術詳解

C高級技術詳解 目錄 模板 (Templates)右值和移動語義 (Rvalue and Move Semantics)定位 new (Placement new)強類型 (Strong Types)智能指針 (Smart Pointers)容器和算法 (Containers and Algorithms)Lambda表達式常量表達式 (constexpr)多線程和并發 (Multithreading and Co…

跨境賣家緊急自查,Endryko Karmadi四季版畫版權維權

25年7月2日&#xff0c;Keith律所代理印尼藝術家Endryko Karmadi發起全新版權維權行動。案件基本情況&#xff1a;起訴時間&#xff1a;2025-7-2案件號&#xff1a;25-cv-07436品牌&#xff1a;Endryko Karmadi Work原告&#xff1a;Endryko Karmadi 原告律所&#xff1a;keith…

M3088NL是一款網絡濾波器/變壓器支持100M和1000M網絡環境,適用于高速網絡傳輸場景M3088

M3088NL是一款網絡濾波器/變壓器&#xff0c;主要特點如下&#xff1a;兼容性 支持100M和1000M網絡環境&#xff0c;適用于高速網絡傳輸場景。 ?封裝形式 采用SOP/SOIC封裝&#xff0c;便于電路集成。 ?應用場景 常用于網絡電話、開關電源等需要穩定電流的設備&#xff0c;符…

PyQt動態布局管理器:QSplitter詳細指南

PyQt動態布局管理器&#xff1a;QSplitter詳細指南 QSplitter簡介 在PyQt中&#xff0c;除了常見的QVBoxLayout、QHBoxLayout等靜態布局管理器外&#xff0c;QSplitter提供了一種動態布局解決方案。QSplitter允許用戶通過拖拽分隔條來實時調整控件大小&#xff0c;為應用程序提…

Java設計模式之行為型模式(備忘錄模式)實現方式詳解

最近看到一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 一、基礎實現結構 角色定義與代碼骨架 備忘錄模式包含三個核心角色&#xff0c;其協作關系如下&#xff1a; Originator&#xff08;發起人&…

k8s:離線部署tomcatV11.0.9,報Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh

本文記錄了在離線環境下部署Tomcat容器時遇到的權限問題及解決方案。在Docker環境中運行Tomcat時出現&quot;找不到setclasspath.sh&quot;錯誤&#xff0c;通過添加--security-opt seccompunconfined參數解決。在Kubernetes環境中部署時出現相同問題&#xff0c;通過設置…

Linux操作系統之線程(五):線程封裝

目錄 前言 一、線程ID及進程地址空間布局 二、線程棧與線程局部存儲 三、線程封裝 總結&#xff1a; 前言 我們在上篇文章著重給大家說了一下線程的控制的有關知識。 但是如果我們要使用線程&#xff0c;就得那這pthread_create接口直接用嗎&#xff1f;這樣豈不是太過麻…

【物理與機器學習】從非平衡熱力學到擴散模型

[toc] 0.引子:從非平衡熱力學開始 1.架構簡介 2.反向過程的具體推導與 DDPM 改進摘要&#xff1a;擴散模型將非平衡熱力學的“噪聲注入—去噪逆轉”理念注入生成建模中。DDPM&#xff08;Denoising Diffusion Probabilistic Models&#xff09;在 SD2015 的基礎上&#xff0c;通…

Git常用命令詳解:從入門到精通

前言 Git作為當今最流行的分布式版本控制系統&#xff0c;已經成為開發者必備的技能之一。無論你是獨立開發者還是團隊協作&#xff0c;掌握Git的基本操作都能極大提高工作效率。本文將詳細介紹Git的常用命令&#xff0c;幫助你快速上手并精通Git的基本使用。 一、Git基礎概念…

Vue-22-通過flask接口提供的數據使用plotly.js繪圖(一)

文章目錄 1 任務背景 2 Flask提供接口(server.py) 2.1 原始代碼 2.2 跨域問題 3 Vue3獲取數據并渲染Plotly圖表 3.1 新建工程 3.2 程序 3.2.1 index.html(入口) 3.2.2 cpmponents/Plot.vue(子組件) 3.2.3 App.vue(父組件) 3.2.4 main.ts 3.3 展示 4 選擇圖表類型繪圖 4.1 App.v…

【mysql】換主鍵

需求&#xff1a;曲庫表的主鍵錯了&#xff0c;原先設置的是(sang_id),應該設置為&#xff08;sang_name,singer&#xff09;聯合主鍵。-- &#xff08;0&#xff09;先備份數據&#xff0c;我這里沒備份 -- &#xff08;1&#xff09;進行主鍵的切換之前&#xff0c;要進行一些…