lyh20021209 2022-01-15 19:59 采纳率: 76.9%
浏览 48
已结题

一道PAT 1030完美数列 java实现 测试用例不通过

1030 完美数列 (25 分)
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。

现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。

import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int N=scan.nextInt();
        int p=scan.nextInt();
        int[] a=new int[N];//a是用来存输入的数列的数组
        int[] b=new int[N];//b是用来存对于任意的a中的元素,若将其作为最终数列的最小值,所对应的数列的最大长度的数组
        for(int i=0;i<N;i++){
            a[i]=scan.nextInt();
        }
        Arrays.sort(a);
        for(int i=0;i<N;i++){
            int count=0;//一开始数列的长度均为0
            for(int j=i;j<N;j++){
                if(a[i]*p>=a[j]) count++;//如果最小值乘以参数仍大于当前元素,则数列长度加1(相当于把当前的元素选入数列)
            }
            b[i]=count;//把由当前a中的元素作为最小值的数列的最终长度存进b中
        }
        Arrays.sort(b);//把b升序一下,打印最后一个元素,也即理论上数列长度的最大值
        System.out.println(b[b.length-1]);
    }
}//这段代码运行超时我可以理解,答案错误我是真想不到有什么特殊情况没有考虑到了。

这个写法具体会出现什么问题?

  • 写回答

1条回答 默认 最新

  • 霖行 2022-01-15 21:08
    关注

    最后一点错误,是爆int了,开long就可以过。至于运行超时,可以用滑动窗口方法进行优化,把时间复杂度优化到O(n)。这题Java时间过不去,Java效率太慢了。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    typedef long long LL;
    const int MAXN = 1e5 + 5;
    
    LL A[MAXN];
    int N, P, ans;
    
    int main()
    {
        cin >> N >> P;
        for (int i = 0; i < N; i++)
            cin >> A[i];
        sort(A, A + N);
        int s = 0, e = 0;//左右边界
        while (e < N)
        {
            while (e小于N并且A[s]*P大于等于A[e])
                e++;//更新最大值
            与ans比较,更新ans;
            s++;//更新最小值
        }
        ans = max(ans, e - s);//最后一次更新
        cout << ans << endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 1月15日

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?