算法课作业
来源:互联网 发布:网络传输速度和速率 编辑:程序博客网 时间:2024/06/03 15:21
第一题:
题意:现在有一个数列,让你找出这个数列里面有没有主元素,有的话输出Yes并且输出这个元素,没有的话输出No.
注:主元素是指如果数列里面有一个数的总个数大于这个数列里面元素总个数的话,我们就称这个数位主元素
样例输入:
5
1 2 3 3 3
5
1 2 3 3 4
样例输出:
Yes 3
No
题意:现在有一个数列,让你找出这个数列里面有没有主元素,有的话输出Yes并且输出这个元素,没有的话输出No.
注:主元素是指如果数列里面有一个数的总个数大于这个数列里面元素总个数的话,我们就称这个数位主元素
样例输入:
5
1 2 3 3 3
5
1 2 3 3 4
样例输出:
Yes 3
No
解题思路:一个数列里面如果有主元素,那么这个元素肯定有个特点,那就是这个元素肯定占据着这个数列第N/2+1小这个位置。这样我们就把问题转化为了求解这个数列第N/2+1小的这个数。求解到这个数之后我们循环一遍统计一下这个元素出现了多少次,如果这个元素出现的次数大于N/2那么就说明这个元素是主元素,如果小于等于N/2那么就说明这个元素不是主元素。
#include<iostream>using namespace std; int N; //N代表数字的总个数int R[100005]; //R用来存储N个数 int Partition(int R[],int low,int high){int i=low,j=high,pivot=R[low];while(i<j){while(i<j&&pivot<=R[j])j--;if(i<j)swap(R[i++],R[j]);while(i<j&&R[i]<=pivot)i++;if(i<j)swap(R[i],R[j--]);}return j;}//返回第几个位置的元素是第k小int Kth_Number(int R[],int low,int high,int k){int pivotpos;while(low<high){pivotpos=Partition(R,low,high);if(pivotpos==k)return pivotpos;else if(pivotpos>k)return Kth_Number(R,low,pivotpos-1,k);else if(pivotpos<k)return Kth_Number(R,pivotpos+1,high,k);}} int main(){//freopen("1.txt","r",stdin);while(scanf("%d",&N)!=EOF){for(int i=1;i<=N;++i)scanf("%d",&R[i]);int pos=Kth_Number(R,1,N,N/2+1); int sum=0;for(int i=1;i<=N;++i)if(R[i]==R[pos])sum++;if(sum>N/2)printf("Yes %d\n",R[pos]);else printf("No\n");}}
- 算法课作业
- 算法作业
- 算法作业
- 算法作业
- 算法作业
- 算法作业
- 第一课作业 关于程序算法
- 普林斯顿算法课第五周作业
- 普林斯顿算法课第一周作业
- 普林斯顿算法课第二周作业
- 普林斯顿算法课第三周作业
- 普林斯顿算法课第四周作业
- 算法课第一周作业 | tow sum
- 算法课第二周作业 | Majority Element
- 算法课第三周作业 | Subsets
- 算法课第四周作业 | Course Schedule
- 算法课第六周作业 | Jump Game
- 算法课第七周作业 | Word Break
- ZOJ1260 POJ1364 HDU1531 King
- 【C++】静态绑定和动态绑定
- 微软等公司数据结构+算法面试100题--链表
- 基于mini6410的linux驱动学习总结(五 字符设备驱动程序实例分析(虚拟设备驱动))
- Java论坛汇总
- 算法课作业
- matlab 字符串链连接
- google 对CSDN 博客的收录
- Linux 内核驱动--阻塞与非阻塞机制及Poll/Select分析
- 如何让Android下的多行EditText焦点光标默认在第一行
- java RMI技术
- 图像反色 cvNot(img, pDstImg);
- 转行前的感慨 告别程序员生涯
- 【C++】内存泄漏问题