題目鏈結
有n個程式,每個程式具有記憶體和重要性兩個屬性,讓你在刪除不小於m記憶體的程式下,最少刪除多少重要性。
因為重要性只有兩種1和2, 所以我們根據這兩種將記憶體分為s1、s2,可以看出來當重要性相同時我們要盡可能的選擇比較大的記憶體,所以分別排序。當列舉s1的字首和增大時,s2的字首和一定是減小的,所以我們可以使用雙指標
時間複雜度 o(n
)o(n)
o(n)
#include
using
namespace std;
const
int n =
2e5+10;
int n, m;
pair<
int,
int> p[n]
;long
long s1[n]
, s2[n]
;bool
cmp(
long
long a,
long
long b)
intmain()
sort
(s1 +
1, s1 +
1+ cnt1, cmp)
,sort
(s2 +
1, s2 +
1+ cnt2, cmp)
;for
(int i =
1; i <= cnt1; i++
) s1[i]
+= s1[i -1]
;for
(int i =
1; i <= cnt2; i++
) s2[i]
+= s2[i -1]
;int res =
0x3f3f3f3f
;for
(int i =
0, j = cnt2; i <= cnt1; i++
) cout <<
(res ==
0x3f3f3f3f?-
1: res)
<< endl;
}return0;
}
字首和 差分 位運算 雙指標
可以利用字首和解決用o n 的時間複雜度求出一段序列的某一段區間的和。s i a 1 a 2 a i a l a r s r s l 1 例題輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和...
寒假刷雙指標《雙指標》
633.平方數之和 難度中等163 給定乙個非負整數c,你要判斷是否存在兩個整數a和b,使得a2 b2 c。示例 1 輸入 c 5輸出 true解釋 1 1 2 2 5示例 2 輸入 c 3輸出 false示例 3 輸入 c 4輸出 true示例 4 輸入 c 2輸出 true示例 5 輸入 c 1...
快慢指標 雙指標
雙指標 二 左右指標的常用演算法 鏈結 利用快慢指標 最開始slow與fast指標都指向鍊錶第乙個節點,前者解決主要解決鍊錶中的問題,listnode detectcycle listnode head slow head while slow fast return slow 設相遇點距環的起點的...