2.设计包含min 函数的栈。3.求子数组的最大和
来源:互联网 发布:鲁班软件 上市 编辑:程序博客网 时间:2024/06/14 07:47
/*2.设计包含 min 函数的栈。定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。思路:使用一个辅助栈来保存最小元素,该辅助栈名字为minimum stack,其栈顶元素为当前栈中的最小元素。要获取当前栈中最小元素,只需要返回minimum stack的栈顶元素即可。每次执行push操作,检查push的元素是否小于或等于minimum stack栈顶元素。如果是,则也push该元素到minimum stack中。当执行pop操作的时候,检查pop的元素是否与当前最小值相等。如果相同,则需要将改元素从minimum stack中pop出去。 */#include<iostream>#include<stdio.h>#include<stack>using namespace std;struct StackGetMin{stack<int> element;stack<int> minStack;void push(int x){element.push(x);//push的元素小于当前minStack的最小元素,则push到minStack中if(minStack.empty() || x<=minStack.top())minStack.push(x);}bool pop(){if(element.empty()) return false;//如果原始栈栈顶元素与minStack栈顶元素相同,则将该元素也从minStack中pop出去。if(element.top()==minStack.top())minStack.pop();element.pop();return true; } bool getMin(int &min) { if(minStack.empty()) return false; else { min=minStack.top();//不需要出栈 return true; } }};int main(){ StackGetMin stackMin; stackMin.push(4); stackMin.push(6); stackMin.push(2); stackMin.push(1); stackMin.push(5); int min =0; //4 6 2 1 5 stackMin.getMin(min);cout<<min<<endl;//1 stackMin.pop();//4 6 2 1 stackMin.pop();//4 6 2 stackMin.getMin(min);cout<<min<<endl;//2 stackMin.pop();//4 6 stackMin.getMin(min);cout<<min<<endl;//4stackMin.push(3);stackMin.push(7);//4 6 3 7 stackMin.getMin(min);cout<<min<<endl;//3 return 0;}
/*3.求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2,因此输出为该子数组的和 18。贪心 只要正的加上去 sum<0否则加上去 sum=0; 这个较简单只是求和 没有记录位置 */#include<iostream>#include<stdio.h>#include<stack>using namespace std;int maxSubarray(int a[],int size){int i,sum=0;int max=-999999;for(i=0;i<size;i++){sum+=a[i];if(sum<0){sum=0;}else if(max<sum){max=sum;}}return max;}//测试 int main(){int a[]={1,-2, 3, 10, -4, 7, 2, -5};printf("sum=: %d\n",maxSubarray(a,8)); //sum=: 18return 0;}
0 0
- 2.设计包含min 函数的栈。3.求子数组的最大和
- No.2 设计包含min函数的栈 No.3 求子数组的最大和
- 2.设计包含min函数的栈
- 2.设计包含min函数的栈
- 2.设计包含min 函数的栈。
- 2.设计包含min函数的栈
- 2.设计包含min 函数的栈
- 2.设计包含min 函数的栈
- 2.设计包含min函数的栈。
- 2.设计包含min 函数的栈。
- 求无序数组的(max+min)最大的子数组
- 求无序数组中(max+min)最大的子数组
- 3.求子数组的最大和
- 3.求子数组的最大和
- 3.求子数组的最大和
- 3.求子数组的最大和
- 3.求子数组的最大和
- 3.求子数组的最大和
- UVA 437 The Tower of Babylon
- 哎呀
- This Android SDK requires Andriod Developer Toolkit version 20.0.0 or above
- 每日算法之四十三:Rotate List (列表旋转k个元素)
- RBL, UBL, Uboot的关系
- 2.设计包含min 函数的栈。3.求子数组的最大和
- hdoj 2099 整除的尾数 水过。。
- Populating Next Right Pointers in Each Node II
- ADF Mobile 11g 架构
- 并查集
- 1408202044-hd-How many prime numbers.cpp
- 存储过程与函数的区别
- android:sms
- TreeMap类的entrySet()方法的应用