编程小练习3:数组SmallLarge
来源:互联网 发布:人工智能的发展进程 编辑:程序博客网 时间:2024/05/21 08:55
题目:一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,其右边的数都大于等于它。
方法一:
最原始的方法是检查每一个array[i],看是否左边的数都小于等于它,右边的数都大于等于它。这样的话,要找出所有这样的数,时间复杂度为O(n的平方)
方法二:
有更简单的方法,但需要使用额外数组,比如使用RightMin[i]来记录数组array[i]右边(包括自己)的最小值。
有了这样一个额外数组,当我们从头开始遍历原始数组时,我们保存一个当前最大值LeftMax,如果当前最大值刚好等于RightMin[i],那么这个最大值一定满足条件。
代码:
#include <iostream>using namespace std;//方法一//检查每一个array[i],看是否左边的数都小于等于它,右边的数都大于等于它//时间复杂度为O(n2)void SmallLarge(int *arr,int n){int i,j,flag;for(i=0;i<n;i++){flag=1;for(j=0;j<n;j++){if(j<i&&arr[j]>arr[i]){flag=0;break;}else if(j>i&&arr[j]<arr[i]){flag=0;break;}else{}}if(flag)cout<<arr[i]<<' ';}}//方法二void SmallLarge2(int *arr,int n){int k,LeftMax;int *RightMin = new int[n];RightMin[n-1] = arr[n-1]; for(k=n-2;k>=0;k--){if(arr[k]<RightMin[k+1])RightMin[k] = arr[k];elseRightMin[k] = RightMin[k+1];}LeftMax = arr[0];for(k=0;k<n;k++){if(arr[k]>=LeftMax)LeftMax = arr[k];if(LeftMax == RightMin[k])cout<<arr[k]<<' ';}}int main(){int n,i;cin>>n;int *array = new int[n];for(i=0;i<n;i++)cin>>array[i];SmallLarge(array,n);cout<<endl;SmallLarge2(array,n);delete []array;return 0;}
0 0
- 编程小练习3:数组SmallLarge
- 编程小练习(3)
- 编程小练习3
- 编程小练习2:数组乘积
- Java基础编程小练习---(数组)学生成绩管理系统
- 对象数组小练习
- 数组小练习
- 三维数组小练习
- 数组方法小练习
- 编程练习小程序
- 编程小练习
- 编程小练习(1)
- 编程小练习(2)
- 编程小练习(4)
- 编程小练习(5)
- 编程小练习(6)
- VB编程小练习
- 编程小练习
- C++多态的实现原理
- zxing二维码
- U盘安装Centos 更新raid驱动
- HDU 4869 Turn the pokers(瞎搞+逆元快速幂)
- Ibatis2.3.4的一个bug
- 编程小练习3:数组SmallLarge
- poj2752 KMP的next[]函数的理解 或者 扩展的KMP
- jquery实现省市县三级联动的jQuery插件
- hduoj1092(A+B for Input-Output Practice (IV))
- 2014 Multi-University Training Contest 1 - A. Couple doubi
- 黑马程序员【代理模式与Java动态代理】
- JSP内置对象学习笔记
- Android通过使用jtds.jar这个工具访问指定IP地址电脑上的sqlserver2008 数据库
- Tk Tutorial - 4. Tk Concepts