2020 打地鼠(貪心 雙指標)

2021-10-18 22:33:51 字數 1056 閱讀 6943

給定 n 個整數 a1, a2, …, an 和⼀個 d,你需要選出若干個整數,使得將這些整數從小到大排好序之後,任意兩個相鄰的數之差都不小於給定的 d,問最多能選多少個數出來。

輸入格式

第一行兩個整數 n,d (1<=n<=10^5, 0<=d<=10^9),分別表示整數個數和相鄰整數差的下界。

第二行 n 個整數 a1, a2, …, an (1<=ai<=10^9, 1<=i<=n),表示給定的 n 個整數。

輸出格式

僅一行⼀個整數,表示答案。

樣例輸入

621

4285

7

樣例輸出

3
審清楚題目,是排序後的相鄰兩數之差不小於給定值,「不小於」即大於等於!而且可能有多重方案,但題目只需要求出滿足方案的數字個數!

只要求數字最多的方案的數字個數,按題目從小到大排序後,其實這裡已經暗示可以用貪心演算法了——每次先取出小的,這樣後面能計算出數字個數最多的情況。從小的數字開始遍歷,設定雙指標,快指標i和慢指標j遍歷:

(1)如果滿足則快指標和慢指標同進1格;

(2)如果不滿足則只用快指標前進1格。

ps:設定的ans是符合要求的組數,所以最後注意ans+1才是數字個數。

#include

#include

#include

using

namespace std;

intmain()

sort

(vec.

begin()

,vec.

end())

;//開幹

int j=0;

//j是慢指標,i是快指標

int ans=0;

for(

int i=

1;i)else

} cout<1

("pause");

}

打地鼠遊戲(貪心)

照例化簡題意 0點n個任務,每個任務有乙個權值和乙個消失時間,要在消失之前完成才會獲得價值,求最大值 solution 蒟蒻一開始居然往dp上想。集訓的東西,我卻忘了,看來還沒消化完啊。最後歪歪出來乙個類似正解的東西但是我搞崩掉了.首先,在每個點完成消失的東西,然後在空閒的點找最大的完成。貌似是對的...

貪心演算法(1) 雙指標貪心演算法

leetcode例題 給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸...

45 最大子陣列差(貪心法,雙指標,隔板)

給定乙個整數陣列,找出兩個不重疊的子陣列a和b,使兩個子陣列和的差的絕對值 sum a sum b 最大。返回這個最大的差值。樣例給出陣列 1,2,3,1 返回 6 思路 兩個指標,經過前面題的求解,這道題的思路是,分別從左右遍歷陣列,求出其left max,和right min,然後相減,但有可能...