数据结构与算法分析(C++第三版)第二章问题总结

来源:互联网 发布:mac迅雷自带播放器 编辑:程序博客网 时间:2024/05/16 09:42

第二章

(1)最大子序列和问题

最大子序列和问题
求解方法:
算法1:时间复杂度O(N3)
算法1

算法2:时间复杂度O(N2)
算法2

算法3:时间复杂度O(NlogN)
算法3

//编写实现//编写网址:http://www.anycodes.cn/zh/#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;int maxvalue(vector<int>&a ,int left,int right){    if(left==right){        if(a[left]>0){            return a[left];           }else{            return 0;        }    }    int center=(left+right)/2;    int maxleft=maxvalue(a,left,center);    int maxright=maxvalue(a,center+1,right);    int borderleftmax=0,borderleftsum=0;    for(int i=center;i>=left;i--){        borderleftsum+=a[i];        if(borderleftsum>borderleftmax){            borderleftmax=borderleftsum;        }    }    int borderrightmax=0,borderrightsum=0;    for(int i=center+1;i<=right;i++){        borderrightsum+=a[i];        if(borderrightsum>borderrightmax){            borderrightmax=borderrightsum;        }    }    int merge=borderleftmax+borderrightmax;    return max(max(maxleft,maxright),merge);}int main(){    int arraym[]={-2,11,-4,13,-5,-2};    vector<int> m(arraym,arraym+6);    cout<<maxvalue(m,0,5)<<endl;        return 0;}

算法4:时间复杂度O(N)
算法4

(2)二分搜索

给定一个整数X和整数A1A2A3......AN1,后者已经预先排序在内存中,求下标i使得Ai=X,如果X不再数据中,则返回-1。

//自己编写的代码,可在下述在线编译网址上运行成功#include <iostream>#include<vector>using namespace std;int main(){    int arraym[]={-1,-2,3,5,6,9,15};    vector<int> a(arraym,arraym+7);    int x=6;    int m=0,n=a.size()-1;    int center=(m+n)/2;    while(m!=n){        if(a[center]==x)   {cout<<center<<endl;break;}        else if(a[center]>x) {n=center;}        else { m=center;}        center=(m+n)/2;    }    if(a[center]!=x) cout<<"-1"<<endl;    return 0;}

在线编译网址:http://www.anycodes.cn/zh/

书中代码如图所示:
二分搜索

(3)欧几里得算法

欧几里得算法

(4)幂运算

幂运算

阅读全文
0 0
原创粉丝点击