C++得到一个数组的最大递减数组({3,9,4,5,0}得到结果是{9,4,0})
2015-05-01 16:08
267 查看
#include <iostream> using namespace std; template <typename T> struct Node { T data; Node *link; Node():data(T()),link(NULL){} }; template<typename T> struct M_Node { Node<T> *adj;//保存节点指针. T data; //保存当前递减数字个数. }; template<typename T> class HashList { public: HashList(int n) { node = new M_Node<T> ; for(int i=0;i<n;i++) { node[i].data = 0;//递减节点个数都初始化为0. } size = n; } void Init(int a[]) { for(int i=0;i<size;i++) { Node<T> *s = new Node<T>(); s->data = a[i]; node[i].adj = s; } }//将数组中的每一个数字都当作一个开始节点。 void Insert(int start,int end,int a[]) { Node<T> *p = node[start].adj; for(int i=start+1;i<size;i++) { Node<T> *q = NULL; while(p!=NULL) { q = p; p = p->link; } if(p==NULL && (q->data > a[i])) { Node<T> *s = new Node<T>(); s->data = a[i]; q->link = s; node[start].data++; } p=q; }//依次比较插入节点. } void Show() { int sum = 0; int j = 0; int i =0; for(;i<size;i++) { if(sum<node[i].data) { sum = node[i].data; j = i; } } //得到递减节点数最多的下标. Node<T> *p = node[j].adj; while(p!=NULL) { cout<<p->data<<" "; p=p->link; } cout<<endl; } private: int size; M_Node<T> *node; }; int main() { int a[]={6,5,4,12,11,10,9,3,2,0,12,3,4,6}; HashList<int> sh(14); sh.Init(a); for(int i=0;i<14;i++) { sh.Insert(i,14,a); } sh.Show();//12 11 10 9 3 2 0为输出结果. return 0; }
相关文章推荐
- C++ - 一个非递减数组,下标从0到n,元素的取值范围为从0到n的整数,判断其中是否有重复元素
- 最大子数组问题-c++代码实现及运行实例结果
- 输入一个数组,用main函数调用一个Lookfor函数找出最大值 最小值 运行结果错误 。请大家帮忙找一下原因!
- 最大子数组问题-c++代码实现及运行实例结果
- 求一个数组的最大子数组(C/C++实现)
- 最大子数组问题-c++代码实现及运行实例结果
- 求一个数组相邻数的最大和,并且得到开始编号和结束编号(原创)
- 算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- c++ 找出一个整形数组中元素的最大值
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 给定只包含正数的数组,给出一个方法,将数组中的数拼接起来,得到的数,是最大的。
- 面试题:一个整型数组中各元素排列组合得到的最大的一个数 ,比如,1,3,9,11,23,233,911 要得到:9,911,3,233,23,11,1
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果