貪心(基礎算法)--- 區間選點

905. 區間選點

在這里插入圖片描述

思路

(貪心)O(nlogn)

根據右端點排序

  1. 將區間按右端點排序

  2. 遍歷區間,如果當前區間左端點不包含在前一個區間中,則選取新區間,所選點個數加1,更新當前區間右端點。如果包含,則跳過。

  3. 輸出所選點的個數。

舉例: 為什么不能根據左端點排序呢?

如下圖所示,有三個區間

image-20240303163626866

我們按右側排序是如圖所示,l3 > r2,點數加1,更新右端點,l1 < l3,無需更新,直接跳過

image-20240303163819975

如果改成按左側排序的話,r2 < r1 && r3 < r1,無需更新所需點數,輸出點數為1(錯誤)。

  • 第一個區間為l1~r1, 當我們遍歷到l2~r2的時候,沒有問題,l2 < r1, 無需更新。
  • 但當我們遍歷到l3~r3這個區間的話,就出現問題了,l3 < r1, 無需更新
  • 輸出點數1

image-20240303163626866

解決辦法 :在遍歷其他區間的時候,同時更新區間右端點取最小值

Java代碼

import java.util.*;
class Range implements Comparable<Range>{int l,r;public Range(int l,int r){this.l = l;this.r = r;}public int compareTo(Range o){return Integer.compare(r,o.r);//return this.r - o.r;}
}
public class Main{static int N = 100010,INF = 0x3f3f3f3f,n;static Range[] range = new Range[N];//結構體創建數組需要定義成全局變量public static void main(String[] args){Scanner scan = new Scanner(System.in);n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int l = scan.nextInt();int r = scan.nextInt();range[i] = new Range(l,r);}//結構體排序Arrays.sort(range,0,n); //Arrays.sort(range, 0, n, (o1, o2) -> o1.r - o2.r);int res = 0;//表示一共需要多少點int ed = -INF; // 上一個點的右端點for(int i = 0 ; i < n ; i ++ ){if(range[i].l > ed){res ++ ;ed = range[i].r;}}System.out.println(res);}
}

根據左端點排序


import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();List<Pair> v = new ArrayList<>();for(int i = 0; i < n; i ++) {int l = sc.nextInt();int r = sc.nextInt();v.add(new Pair(l, r));}Collections.sort(v, (a, b) -> a.x - b.x);int l = Integer.MIN_VALUE;int r = Integer.MIN_VALUE;int res = 0;for(Pair p : v) {if(p.x <= r) {// l = Math.max(l, p.x);r = Math.min(r, p.y);   (每次取r的最小值,本質上其實還是根據右端點進行排序)} else {res += 1;l = p.x;r = p.y;}}System.out.println(res);}}class Pair implements Comparable<Pair> {int x;int y;public Pair(int x, int y) {this.x = x;this.y = y;}@Overridepublic int compareTo(Pair o) {return Integer.compare(this.x, o.x);}
}

正確性證明

定義:Ans 為所有可行方案中所需點最小數量,Cnt為當前方案中所需點的數量(一種可行方案)

  1. 為證明 Ans == Cnt ,我們只需證明 Ans >= Cnt , Ans <= Cnt即可。

  2. 既然Ans為最小數量,易得Ans <= Cnt。

  3. 由于我們是根據右端點進行排序遍歷,舉一個極端例子,由圖可知,Cnt等于4,Ans >= 4。

  4. Ans >= Cnt &&Ans <= Cnt -> Ans = Cnt。

image-20240303172529134

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

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

相關文章

常見的算法

查找算法 基本查找 package MyApi.search;public class a01BasicSearchdemo01 {public static void main(String[] args) { int[] arr{131,127,147,81,103,23,7,79}; int number82;System.out.println(BasicSearch(arr,number));}public static boolean BasicSearch(int[] ar…

Java二叉樹(1)

&#x1f435;本篇文章將對二叉樹的相關概念、性質和遍歷等知識進行講解 一、什么是樹 在講二叉樹之前&#xff0c;先了解一下什么是樹&#xff1a;樹是一種非線性結構&#xff0c;其由許多節點和子節點組成&#xff0c;整體形狀如一顆倒掛的樹&#xff0c;比如下圖&#xff1…

給nginx部署https及自簽名ssl證書

一、生成服務器root證書 openssl genrsa -out root.key 2048 openssl req -new -key root.key -out root.csr#Country Name (2 letter code) [XX]:---> CN#Country Name (2 letter code) [XX]:---> CN#State or Province Name (full name) []:---> Shanghai#Locality…

多層感知機 + 代碼實現 - 動手學深度學習v2 | 李沐動手學深度學習課程筆記

感知機 感知機≈二分類問題 感知機和其他問題的對比 訓練感知機 如果小于等于零&#xff0c;說明預測錯啦 &#xff0c;其實就是同號為正&#xff0c;異號為負 舉個分類的例子 增加樣本&#xff0c;改變分類線 繼續分類 感知機的收斂定理 XOR問題 XOR問題其實就是第1、3象限數…

【踩坑】一條指令解決torch_scatter等安裝報錯安裝不上問題

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhang.cn] 目錄 背景說明 (推薦方法)解決方法一&#xff1a;使用conda安裝。 解決方法二&#xff1a;指定pip的網站。 解決方法三&#xff1a;直接去下載whl文件。 (終極方法)解決方法四&#xff1a;配置MSVC 特殊情況…

Linux系統運維腳本:掃描主機上多個端?狀態

目 錄 一、要求 二、解決方案 &#xff08;一&#xff09;解決思路 &#xff08;二&#xff09;方案 三、腳本程序實現 &#xff08;一&#xff09;腳本代碼和解釋 1、腳本代碼 2、代碼解釋 &#xff08;二&#xff09;腳本驗證 1、腳本編輯 2、給予執…

構建 ESLint 內存泄露檢測插件入門:提升代碼質量與防范運行時風險

前言 本文目的是介紹如何創建開發一個自定義規則 ESLint 插件。利用其能力,檢測一些代碼中可能存在的內存泄露并及時進行提示,避免潛在的后期影響。 本文實現其中一部分功能–檢測事件監聽器的使用是否存在內存泄露為例來演示基本的 ESLint 自定義規則插件開發的過程。用以…

nginx筆記整理

目錄 一.Nginx基礎介紹 二.nginx安裝配置 三.Nginx配置文件 3.1nginx主配置文件(/etc/nginx/nginx.conf) 3.2默認的網站配置文件(/etc/nginx/conf.d/default.conf) 四.創建新的虛擬主機 五.Nginx日志 5.1nginx日志格式 5.2查看日志 5.3日志緩存(了解) 5.4日志輪轉(/…

COMPOSER安裝使用WIN下升級PHP-V

想用TP6使用phpspreadsheet但是說我PHP版本低&#xff0c;原來是PHP7.0 composer要求至少7.4 直接修改環境變量&#xff0c;把PHP目錄切換到7.4 composer升級比較簡單&#xff0c;在PHP目錄下CMD然后官網的命令執行下即可 下面就可以在TP根目錄下執行命令安裝PHPSPREADSHEET…

sdbusplus:為connection綁定bus

基于前面對于sdbusplus的使用,可以看出,使用sdbusplus時可以通過bus完成method的調用,也可以通過connection完成方法的調用,比如: auto b = bus::new_default_user(); b.new_method_call(...); boost::asio::io_context io; auto conn = make_shared<sdbusplus::asio…

SpringBoot的基本了解

SpringBoot能廣泛應用的原因 1:獨立運行 Spring Boot而且內嵌了各種servlet容器,Tomcat、Jetty等,現在不再需要打成war包部署到容器 中,Spring Boot只要打成一個可執行的jar包就能獨立運行,所有的依賴包都在一個jar包內。 2:簡化配置 spring-boot-starter-web啟動器自動…

Domain-Wall Memory Buffer for Low-Energy NoCs

目錄 Domain-Wall Memory Buffer for Low-Energy NoCs主要工作DWM&#xff1a; Domain-wall memory磁疇壁存儲器磁性納米線陣列設計 開銷分析實驗設計實驗結果分析 參考資料 Domain-Wall Memory Buffer for Low-Energy NoCs 主要工作 我們基于SRAM在NoC中使用的頭尾指針概念&a…

2024年【道路運輸企業主要負責人】考試報名及道路運輸企業主要負責人模擬考試

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 道路運輸企業主要負責人考試報名根據新道路運輸企業主要負責人考試大綱要求&#xff0c;安全生產模擬考試一點通將道路運輸企業主要負責人模擬考試試題進行匯編&#xff0c;組成一套道路運輸企業主要負責人全真模擬考…

字符串匹配——煩人的KMP

相信很多同學看到這篇文章的時候&#xff0c;已經被KMP拿捏了吧&#xff01;KMP算法說難&#xff0c;倒也不是很難&#xff0c;手算都會&#xff0c;說不難吧&#xff0c;短短幾行代碼愣是看不懂&#xff0c;輾轉反側&#xff0c;翻書查閱&#xff0c;視頻講解&#xff0c;最后…

MySQL性能提升之道:深入探討SQL與索引優化實戰技巧

MySQL性能優化&#xff1a; MySQL性能優化是一個涉及多個層面的過程&#xff0c;旨在提高數據庫的響應速度、處理能力和資源利用率。以下是一些關鍵的性能優化策略&#xff1a; 硬件優化&#xff1a; 升級硬件資源&#xff0c;如CPU、內存、SSD硬盤等&#xff0c;以提供更好的…

electron nsis 安裝包 window下任務欄無法正常固定與取消固定 Pin to taskbar

問題 win10系統下&#xff0c;程序任務欄在固定后取消固定&#xff0c;展示的程序內容異常。 排查 1.通過論壇查詢&#xff0c;應該是與app的api setAppUserModelId 相關 https://github.com/electron/electron/issues/3303 2.electron-builder腳本 electron-builder…

三、低代碼平臺-單據配置(單表增刪改查)

一、業務效果圖 主界面 二、配置過程簡介 配置流程&#xff1a;業務表設計 -》業務對象建立-》業務單據配置-》菜單配置。 a、業務表設計 b、業務對象建立 c、業務單據配置 功能路徑&#xff1a;低代碼開發平臺/業務開發配置/單據配置維護 d、菜單配置

linux-tar命令--exclude

命令如下&#xff1a;將workscript 壓縮成workscript_v2.tar.gz&#xff0c;不打包workscript_v2目錄下的logs下的所有文件。 tar -zcf workscript_v2.tar.gz workscript --excludeworkscript_v2/logs workscript_v2.tar.gz--壓縮的文件名&#xff0c;可自定義 workscript--…

GCN原理回顧論文導讀

Cora_dataset description Cora數據集是一個常用的學術文獻用網絡數據集&#xff0c;用于研究學術文獻分類和圖網絡分析等任務。 該數據集由機器學習領域的博士論文摘要組成&#xff0c;共計2708篇論文&#xff0c;涵蓋了7個不同的學科領域。每篇論文都有一個唯一的ID&#xf…

【Linux】linux內核模塊編譯makefile

1、編譯進內核的模塊 如果需要將foo.ko編譯進內核&#xff0c;需要在makefile中進行配置&#xff1a; obj-y foo.o2、編譯可加載的模塊 如果需要將foo.ko編譯成可加載模塊&#xff0c;需要在makefile中進行配置&#xff1a; obj-m foo.oobj-m表示編譯生成可加載模塊。相對…