#include <stdio.h>
/*
遍历打印数组
*/
void printArr(int* arr,int len){
for (int i=0; i<len; i++) {
printf(" %d ,",arr[i]);
}
printf("\n");
}
/*
打印数组arr中的元素,从end-beforeOff的位置打印到end的位置
*/
void printArrForOffset(int* arr,int beforeOff,int end){
for (int i=end-beforeOff; i<=end; i++) {
printf(" %d ,",arr[i]);
}
}
/*
求数组的最大递增子数组
*/
void maxAsSubArray(int* arr,int len){
//创建一个数组,记录以每个元素为终点的最大子数组
int maxFlag[len];
//记录此时以当前节点为终点的最大子数组的长度
int currentMax = 0;
maxFlag[0]=currentMax;
int pureMax = 0;
//遍历数组
for(int i=1;i<len;i++){
if(arr[i]>arr[i-1]){
currentMax ++;
}else {
currentMax=0;
}
maxFlag[i] = currentMax;
if(pureMax<currentMax){
pureMax = currentMax;
}
}
printArr(maxFlag[0],len);
//重新定位最大子数组
for (int i=0; i<len; i++) {
if(pureMax==maxFlag[i]){
printArrForOffset(arr,pureMax,i);
}
}
}
int main(int argc, const char * argv[]) {
int arr[] = {1,4,2,3,5,10,5};
maxAsSubArray(arr, 7);
return 0;
}
最大インクリメント配列アルゴリズムサブアレイ(C言語)
おすすめ
転載: blog.csdn.net/dirksmaller/article/details/103788941
ランキング