PAT算法笔记(七)————完美数列(快速排序)
来源:互联网 发布:首页源码 编辑:程序博客网 时间:2024/05/01 10:21
题目描述
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入描述:
输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。
输出描述:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入例子:
10 82 3 20 4 5 1 6 7 8 9
输出例子:
8
代码:
#include<iostream>using namespace std;void Qsort(double *Array, int left, int right){if (left >= right)return;int first = left;int last = right;int key = Array[first];while (first < last){while (first < last && Array[last] >= key)last--;Array[first] = Array[last];while (first < last && Array[first] <= key){++first;}Array[last] = Array[first];}Array[first] = key;Qsort(Array, left, first - 1);Qsort(Array, first + 1, right);}int main(){int N, p;double Array[100000];cin >> N >> p;for (int i = 0; i < N; i++)cin >> Array[i];Qsort(Array, 0, N - 1);int maxNum=0;for (int i = 0; i < N; i++){for (int j = i+maxNum; j < N; j++){if (Array[j] > Array[i] * p)break;if (j - i + 1 > maxNum)maxNum = j - i + 1;}}cout << maxNum;}核心思路和陷阱:
首先需要排序,原因:由于m*p限制了M的范围,所以尽可能选取大的最小值m,所以需要排序后进行两次循环判断。
涉及到快速排序算法。
0 0
- PAT算法笔记(七)————完美数列(快速排序)
- PAT——1030. 完美数列
- 排序算法七——快速排序
- PAT乙级—1030. 完美数列(25)-native
- PAT--完美数列-快速搜索
- 算法导论笔记——快速排序
- 基础算法学习笔记—快速排序
- PATB1030——完美数列
- 排序算法—快速排序
- 排序算法—快速排序
- java学习笔记(七)——排序算法
- 算法导论学习笔记——快速排序算法
- 快速排序-《算法导论》学习笔记七
- MIT算法导论第四节笔记——快速排序
- 0005算法笔记——【分治法】快速排序
- 0005算法笔记——【分治法】快速排序
- 《算法导论》学习笔记(2)——快速排序
- 算法笔记——【分治法】快速排序
- OpenglES 3.0基础知识
- Java 设计模式
- java 多线程 锁
- 3月题外:关于JS实现图片缩略图效果的一个小问题
- 在自己的服务器上部署 GitLab 社区版
- PAT算法笔记(七)————完美数列(快速排序)
- C
- 20170304#cs231n#6.Neural Networks Part 2: Setting up the Data and the Loss
- 安装phpredis
- Mac下安装pip,virtualenv,IPython
- 六、[LeetCode OJ]Maximum Subarray
- 递归和尾递归
- 关于持续集成打包平台的Jenkins配置和构建脚本实现细节
- uboot分析之make分析