从 1-N 连续数列里取最少的数组成 K white哥 2022-09-19 137 阅读1分钟 前段时间在某交流群里看到一道题,分享一下 题目: 从 1-N 连续数列里取最少的数组成 K 解法一 从后往前遍历数列,累积求和,当累计值 S>=K,一定找到了最少的数 这样时间复杂度是O(N) 显然没有完全使用题目的特征信息 解法二 1-N 连续数列,可以想到等差数列 从N开始一段长度为 TTT 的和可以表示为 S(T)=[(N−T)+N](T+1)2 S(T)=\frac{[(N-T)+N](T+1)}{2}S(T)=2[(N−T)+N](T+1) 有不等式 S(T)>=K S(T)>= KS(T)>=K 解出来 T>=(2N+1)−(2N+1)2−8K2 T >= \frac{(2N+1) - \sqrt{ (2N+1)^2 - 8K }}{2} T>=2(2N+1)−(2N+1)2−8K 向上取整就是结果 如果不考虑开根号的开销的话,可以近似看作 O(1)O(1)O(1)