給定 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,然後相減,但有可能...