daydayupchen 2021-04-23 10:22 采纳率: 0%
浏览 19

1030 完美数列 (25 分)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <ctype.h>

int cmp(const void*,const void *);
int perfect(const int* num,int,int,int);

int cmp(const void* a,const void *b){
	int m=*(int *)a;
	int n=*(int *)b;
	
	return m>n;
}


int main(){
	
	int n,p,max=0;
	scanf("%d %d",&n,&p);
	int num[n];
	if (n==1){
        printf("1");
        return 0;
    }
	for (int i=0;i<n;i++){
		scanf("%d",&num[i]);
	}
	qsort(num,n,sizeof(int),cmp);//从小到大排序 
	int i=0,j=n-1;//i指向最小值,j指向最大值

	while (i<n-1){
		while (j>0){
			if (j>=(i+max)){
                if (num[j]<=(num[i]*p)){
                    int ans=j-i+1;
                    if (ans>max){
                        max=ans;
                        break;
                    }
                }
			}
			j--;
		}
		i++;
		j=n-1;
	}

	printf("%d",max);
	
	return 0;
}

各位大佬,我想问一下我的4和5测试点过不去,4是超时,5是答案错误

我的想法是先排序,然后i指向最小值,j指向最大值,i是外圈大循环,j是小循环

对于节约时间的问题,我已经使用(j>=i+max),这样j就不会继续往小了走使得时间开销变大

请问各位大佬还能怎么改进时间复杂度呀?

  • 写回答

1条回答 默认 最新

  • 源代码大师 博客专家认证 2021-04-26 19:56
    关注

    C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
    C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

    评论

报告相同问题?

悬赏问题

  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败