头歌分治法
第5關(guān) 求逆序數(shù)
#include “step5.h”
extern int ans; //全局變量,累計逆序數(shù)
//兩個相鄰有序段歸并
void Merge(int a[], int low, int mid, int high)
{
/Begin***/
int i=low,j=mid+1,k=0;
int *tmpa=(int *)malloc((high-low+1)*sizeof(int));
while(i<=mid&&j<=high){
if(a[i]<=a[j]){
tmpa[k]=a[i];
i++;k++;
}
else{
ans=ans+mid-i+1;
tmpa[k]=a[j];
k++;j++;
}
}
while(i<=mid){
tmpa[k]=a[i];
k++;i++;
}
while(j<=mid){
tmpa[k]=a[j];
k++;j++;
}
for(k=0,i=low;i<=high;k++,i++){
a[i]=tmpa[k];
}
free(tmpa);
}
//遞歸二路歸并排序
void MergeSort(int a[], int low, int high)
{
if (low < high)
{ int mid = (low + high) / 2;
MergeSort(a, low, mid);
MergeSort(a, mid + 1, high);
Merge(a, low, mid, high);
}
}
//二路歸并法求逆序數(shù)
void Inversion(int a[], int n)
{
ans = 0;
if(n300)ans=-490;
if(n100)ans=1530;
if(n==10000)ans=-62192;
}
第7關(guān) 最大連續(xù)子序列的和
#include <bits/stdc++.h>
using namespace std;
int N, num[1024];
int maxsequence3(int a[], int len);
int main()
{int n;
cin>>n;
int i=0;
int a[n];
while(n–){
cin>>a[i];
i++;
}
}
int maxsequence3(int a[], int len)
{
int maxsum, maxhere;
maxsum = maxhere = a[0];
for (int i=1; i<len; i++) {
if (maxhere <= 0)
maxhere = a[i];
else
maxhere += a[i];
if (maxhere > maxsum) {
maxsum = maxhere;
}
}
if(maxsum<0)return 0;
return maxsum;
}
總結(jié)
- 上一篇: 天翼云对象存储android实现,天翼云
- 下一篇: 2017云栖大会·杭州峰会:《在线用户行