PAT甲级-二分查找类型-1085 Perfect Sequence解题思路

1085 Perfect Sequence (25 分)

在这里插入图片描述

思路

二分查找,大于某个值的数字下标
用到sort、upper_bound

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int num[6]={
    
    2,3,6,7,23,45}; 
	sort(num,num+6);                           //按从小到大排序 
	int pos1=lower_bound(num,num+6,7)-num;    //返回数组中第一个大于或等于被查数的值 
	int pos2=upper_bound(num,num+6,7)-num;    //返回数组中第一个大于被查数的值
	cout<<pos1<<" "<<num[pos1]<<endl;
	cout<<pos2<<" "<<num[pos2]<<endl;
	return 0;	
}
#输出
3 7
4 23

算法

#include<bits/stdc++.h>
using namespace std;

int main()
{
    
    
    int n,k;
    long long num[100005];
    cin>>n>>k;
    for(int i = 0;i<n;i++)
        scanf("%lld",&num[i]);

    sort(num,num+n);
    int len = 0;
    for(int i = 0;i<n;i++){
    
     
        int j = upper_bound(num+i+1,num+n,num[i]*k)-num;
        len = max(len,j-i);
    }
    cout<<len<<endl;

}

猜你喜欢

转载自blog.csdn.net/weixin_43999137/article/details/114452729