很能代表 中等 题目的难度和思维过程。
数据量在 1e5 的话,可以哈希表+模拟。
数据量在 1e9 的话,很明显需要使用 O(n) 以下的算法。
一开始考虑的是,有没有一种方法,统计前缀的所有加和的情况,能够在 O(1) 确定当前值,但想了想应该不太现实…
故开始找规律…
思路:
找规律的题目,最好能够从 “特殊” 再到 “一般”。
class Solution {
public:
int minimumPossibleSum(int n, int target) {
typedef long long LL;
const int mod = 1e9 + 7;
int m = target / 2;
if (n <= m) return 1ll * n * (1 + n) / 2 % mod;
return (m * (1ll + m) / 2 +
(target + target + (n - m - 1ll)) * (n - m) / 2) % mod;
}
};