1085 Perfect Sequence(25 分)

用upper_bound求解

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5 + 10;
typedef long long LL;
LL n, a[maxn], p;
int main()
{
    scanf("%lld%lld", &n, &p);
    for (int i = 0; i < n; i++)scanf("%lld", &a[i]);
    sort(a, a + n);
    int maxnum = 0;
    for (int i = 0; i < n; i++)
    {
        int m = upper_bound(a + i + 1, a + n, a[i] * p) - a;
        maxnum = max(maxnum, m - i);
    }
    printf("%lld", maxnum);
    return 0;
}

two pointers:i和j都从0开始遍历(不是一个头一个尾),这样一次遍历就可以

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5 + 10;
typedef long long LL;
LL n, a[maxn], p;
int main()
{
    scanf("%lld%lld", &n, &p);
    for (int i = 0; i < n; i++)scanf("%lld", &a[i]);
    sort(a, a + n);
    LL maxnum = 0;
    LL i = 0, j = 0;
    while (i < n&&j<n)
    {
        LL number = a[i] * p;
        while (a[j] <= number&&j<n)j++;
        maxnum = max(maxnum, j - i);
        i++;
    }
    printf("%lld", maxnum);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,775评论 0 33
  • 一、XML简介 XMl,EXtensible Markup Language,可扩展标记语言。标记,类似于标签,一...
    lifeline张阅读 6,259评论 0 1
  • 验证码是从后端随机生成的。 注意:后端永远认为前端有可能被伪造。 1.后端调用相关的绘图的第三方类库,或是(平台P...
    Welkin_qing阅读 1,808评论 0 4