貪心題目總結

1. 最長遞增子序列?

我們來看一下我們的貪心策略體現在哪里???

我們來總結一下:

我們在考慮最長遞增子序列的長度的時候,其實并不關心這個序列長什么樣子,我們只是關心最后一個元素是誰。這樣新來一個元素之后, 我們就可以判斷是否可以拼接到它的后面。因此,我們可以創建一個數組,統計長度為 x 的遞增子序列中,最后一個元素是誰。為了盡可能的讓這個序列更長,我們僅需統計長度為x的所有遞增序列中最后一個元素的「最小值」。此時我們來算一下時間復雜度,首先我們要遍歷整個數組,其次我們還要遍歷長度為x的序列,那么此時的復雜度是O(N2),統計的過程中發現,數組中的數呈現「遞增」趨勢,因此可以使用「二分」來查找插入位置。

class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int> ret;ret.push_back(nums[0]);for(int i = 1; i < nums.size(); i++){if(nums[i] > ret.back()){ret.push_back(nums[i]);// 如果能接在最后?個元素后?,直接放}else{// 使用二分找到插入位置int left = 0;int right = ret.size() - 1;while(left < right){int mid = (left + right) / 2;if(ret[mid] < nums[i]){left = mid + 1;}else{right = mid;}}ret[left] = nums[i];// 放在 left 位置上}}return ret.size(); }
};

2. 遞增的三元子序列?

我們會發現這道題目就是最遞增子序列的簡化版,因此我們可以使用貪心的思想,找到最長子序列然后判斷長度是否大于3即可解決,但是實際上我們不需要使用二分算法,因為我們只需要求出長度為3的子序列,僅需兩次比較就可以找到插入位置,同時不用一個數組存數據,僅需兩個變量即可,此時的時間復雜度為O(N).

直接來上代碼:

class Solution {
public:bool increasingTriplet(vector<int>& nums) {int a = nums[0];int b = INT_MAX;for(int i = 0; i < nums.size(); i++){if(nums[i] > b) return true;else if(nums[i] > a) b = nums[i];else a = nums[i];}return false;}
};

3. 最長連續遞增序列

這個題目比較簡單,找到以某個位置為起點的最長連續遞增序列之后(設這個序列的末尾為 j 位置),接下來直接以 j + 1 的位置為起點尋找下?個最長連續遞增序列,我們沒有必要從i + 1位置進行尋找,因為 i 位置找到的序列肯定是最長的!!!

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int ret = 0;int i = 0;while(i < nums.size()){int j = i + 1;// 找到遞增區間的末端while(j < nums.size() && nums[j] > nums[j-1]){j++;}ret = max(ret,j - i);// 直接在循環中更新下?個位置的起點i = j; // 貪心}return ret;}
};

4. 買賣股票的最佳時機

首先我們看到這道題目,第一想到的肯定是暴力枚舉,我們可以依次枚舉兩個位置,然后進行相減,最后保存相減出來的最大值即可,但是這樣的復雜度就是O(N2)的,此時我們就可以進行優化,我們在枚舉賣出價格時候,并不用將前面買入的股票的價格依次枚舉,我們只需要找到其中的最小值即可,這一個點就體現出來貪心的策略,由于只能交易?次,所以對于某?個位置 i ,要想獲得最大利潤,僅需知道前?所有元素的最小值。然后在最小值的位置「買入」股票,在當前位置「賣出」股票即可。

class Solution {
public:int maxProfit(vector<int>& prices) {int prevmin = INT_MAX;int ret = 0; // 記錄最終結果for(int i = 0; i < prices.size(); i++){// 先更新結果ret = max(prices[i] - prevmin, ret);// 再更新最小值if(prices[i] < prevmin)prevmin = prices[i];}return ret;}
};

5. 買賣股票的最佳時機Ⅱ

由于可以進行?限次交易,所以只要是?個「上升區域」,上升區間一定是穩賺的,我們就把利潤拿到手就好了,這就是貪心策略。

?解法一:雙指針

class Solution {
public:int maxProfit(vector<int>& prices) {int ret = 0;for(int i =0 ; i < prices.size(); ){int j = i;while(j + 1 < prices.size() && prices[j + 1] > prices[j]){j++; // 尋找上升的區間}ret += prices[j] - prices[i];i = j + 1;}return ret;}
};

?解法二:拆分交易,只要今天的股票的價格大于昨天,就可以累計到利潤上

class Solution {
public:int maxProfit(vector<int>& prices) {int ret = 0;for(int i = 1; i < prices.size(); i++){if(prices[i] > prices[i - 1])ret += prices[i] - prices[i - 1];}return ret;}
};

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

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

相關文章

HTML5 Web組件技術應用

目錄 Custom ElementsShadow DOMHTML TemplatesHTML ImportsHTML5 Web Components技術是一組相關標準和API的集合,旨在增強Web開發中的組件化能力,允許開發者創建可重用、封裝良好的自定義UI組件,這些組件擁有獨立的視圖層(樣式)、邏輯(行為)和結構(模板)。Web Compon…

【Week-R1】RNN實現心臟病預測,基于tensorflow框架

文章目錄 一、什么是RNN&#xff1f;二、準備環境和數據2.1 導入數據 三、構建模型四、訓練和預測五、其他&#xff08;1&#xff09;sklearn模塊導入報錯&#xff1a;ModuleNotFoundError: No module named sklearn&#xff08;2&#xff09;優化器改為SGD&#xff0c;accurac…

類和對象2

三、C對象模型和this指針 3.1 成員變量和成員函數分開存儲 在C中&#xff0c;類內的成員變量和成員函數分開存儲&#xff0c;只有非靜態成員變量才屬于類的對象上 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <string.h> using namespace …

Linux系統之GoAccess實時Web日志分析工具的基本使用

Linux系統之GoAccess實時Web日志分析工具的基本使用 一、GoAccess介紹1.1 GoAccess簡介1.2 GoAccess功能1.3 Web日志格式 二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹 三、檢查本地環境3.1 檢查本地操作系統版本3.2 檢查系統內核版本3.3 檢查系統鏡像源3.4 更新軟件列表…

JavaFX安裝與使用

前言 最近學習了javafx,開始時在配置環境和導包時遇到了一些麻煩,關于網上很多方法都嘗試過了,現在問題都解決了,和大家分享一下我是怎么實現javafx的配置,希望大家可以通過這個方法實現自己的環境配置! &#x1f648;個人主頁: 心.c &#x1f525;文章專題:javafx &#x1f49…

如何在linux命令行(終端)執行ipynb 文件。可以不依賴jupyter

1.安裝 runipy pip install runipy 2.終端運行 runipy <YourNotebookName>.ipynb 在終端命令行執行shell腳本&#xff0c;&#xff08;也可以在crontab 中執行&#xff09;&#xff1a; (base) [recommendapp-0-5-B-006 script]$ cat run1.sh #!/bin/bashcd /home/recom…

計算機網絡-Traffic-Filter流量過濾策略

一、概述 為提高網絡安全性&#xff0c;管理人員需要控制進入網絡的流量&#xff0c;將不信任的報文丟棄在網絡邊界。所謂的不信任報文是指對用戶來說存在安全隱患或者不愿意接收的報文。同時保證數據訪問安全性&#xff0c;企業網絡中經常會要求一些部門之間不能相互訪問。 背…

服務器數據恢復—同友存儲raid5陣列上層虛擬機數據恢復案例

服務器數據恢復環境&#xff1a; 某市教育局同友存儲&#xff0c;存儲中有一組由數塊磁盤組建的raid5陣列&#xff0c;存儲空間劃分若干lun。每個lun中有若干臺虛擬機&#xff0c;其中有數臺linux操作系統的虛擬機為重要數據。 存儲結構&#xff1a; 服務器故障&#xff1a; r…

前端面試個人技能總結

1.html5新特性 語義化標簽&#xff1a;header footer nav section artical aside媒體標簽&#xff1a;qudio video &#xff08;control autoplay loop &#xff09; source標簽表單新增屬性&#xff1a;輸入類型type:email url data month week color&#xff1b;新增屬性&…

slam14講(第9,10講 后端)

slam14講&#xff08;第9&#xff0c;10講 后端&#xff09; 后端分類基于濾波器的后端線性系統和卡爾曼濾波非線性系統和擴展卡爾曼濾波 BA優化H矩陣的稀疏性和邊緣化H矩陣求解的總結 位姿圖優化公式推導 基于滑動窗口的后端個人見解舊關鍵幀的邊緣化 后端分類 基于濾波器的后…

AtCoder Beginner Contest 355 A~F

A.Who Ate the Cake?(思維) 題意 已知有三個嫌疑人&#xff0c;有兩個證人&#xff0c;每個證人可以指出其中一個嫌疑人不是罪犯&#xff0c;如果可以排除兩個嫌疑人來確定犯人&#xff0c;輸出犯人的身份&#xff0c;如果無法確定&#xff0c;輸出"-1"。 分析 …

AT_abc351_c [ABC351C] Merge the balls 題解

題目傳送門 題目大意 你有一個空序列和 N N N 個球。第 i i i 個球 ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1≤i≤N) 的大小是 2 A i 2^{A_i} 2Ai?。 計算 N N N 操作后序列中剩余的球的個數。 你將進行 N N N 次運算。 在第 i i i 次操作中&#xff0c;你將第 i i…

springboot + Vue前后端項目(第十一記)

項目實戰第十一記 1.寫在前面2. 文件上傳和下載后端2.1 數據庫編寫2.2 工具類CodeGenerator生成代碼2.2.1 FileController2.2.2 application.yml2.2.3 攔截器InterceptorConfig 放行 3 文件上傳和下載前端3.1 File.vue頁面編寫3.2 路由配置3.3 Aside.vue 最終效果圖總結寫在最后…

TabAttention:基于表格數據的條件注意力學習

文章目錄 TabAttention: Learning Attention Conditionally on Tabular Data摘要方法實驗結果 TabAttention: Learning Attention Conditionally on Tabular Data 摘要 醫療數據分析通常結合成像數據和表格數據處理&#xff0c;使用機器學習算法。盡管先前的研究探討了注意力…

Hudi 多表攝取工具 HoodieMultiTableStreamer 配置方法與示例

博主歷時三年精心創作的《大數據平臺架構與原型實現&#xff1a;數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行&#xff0c;點擊《重磅推薦&#xff1a;建大數據平臺太難了&#xff01;給我發個工程原型吧&#xff01;》了解圖書詳情&#xff0c;…

vue3添加收藏網站頁面

結構與樣式 <template><div class"web_view"><ul><li v-for"web in webList" :key"web.title"><a :href"web.src" :title"web.title" target"_blank"><img :src"web.img&…

微信小程序基礎 -- 小程序UI組件(5)

小程序UI組件 1.小程序UI組件概述 開發文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/view/component.html 什么是組件&#xff1a; 組件是視圖層的基本組成單元。 組件自帶一些功能與微信風格一致的樣式。 一個組件通常包括 開始標簽 和 結…

Cyber Weekly #8

賽博新聞 1、微軟召開年度發布會Microsoft Build 2024 本周&#xff08;5.22&#xff09;微軟召開了年度發布會&#xff0c;Microsoft Build 2024&#xff0c;發布了包括大殺器 Copilot Studio 在內的 50 項更新。主要包括&#xff1a; 硬件層面&#xff1a;與英偉達 & A…

3D牙科網格分割使用基于語義的特征學習與圖變換器

文章目錄 3D Dental Mesh Segmentation Using Semantics-Based Feature Learning with Graph-Transformer摘要方法實驗結果 3D Dental Mesh Segmentation Using Semantics-Based Feature Learning with Graph-Transformer 摘要 本文提出了一種新穎的基于語義的牙科網格分割方…