最大下标距离

来源:互联网 发布:windows正版价格 编辑:程序博客网 时间:2024/06/03 12:28

问题:给定一个整型数组,找出最大下标距离j-i,当且仅当A[i]<A[j]和i<j。

时间复杂度O(n) OC算法实现:

/** 5 */#import <Foundation/Foundation.h>typedef void (^complete)(int smallIndex, int bigIndex); //小下标 大下标typedef void (^failed)();@interface MaxIndexDistance : NSObject- (int)maxIndexDistancev1:(NSArray *)dataArr;@end

#import "MaxIndexDistance.h"@implementation MaxIndexDistance- (int)maxIndexDistancev1:(NSArray *)dataArr{    if (dataArr == nil ||dataArr.count < 2) {        return 0;    }        //记录下降序列    NSMutableArray *inDescSeq = [NSMutableArray array];    int min = [dataArr[0] intValue];    [inDescSeq addObject:[NSNumber numberWithBool:YES]];    for (int i = 1; i < dataArr.count; i++) {        if ([dataArr[i] intValue]<min) {            [inDescSeq addObject:[NSNumber numberWithBool:YES]];            min = [dataArr[i] intValue];        }        else        {            [inDescSeq addObject:[NSNumber numberWithBool:NO]];        }    }        int maxDist = 0;    NSInteger i = dataArr.count-1;    NSInteger j = dataArr.count-1;        while (i>=0) {        //倒序找出下降序列index        if ([inDescSeq[i] boolValue] == false) {            i--;            continue;        }                //从后往前 如果A[i]>=A[j] 指针前移        while ((dataArr[i]>=dataArr[j]) && (j>i)) {            j--;        }                if ((j-i)>maxDist) {            maxDist = (int)(j-i);        }                //取得最大下标距离 下降序列指针前移        i--;    }    return maxDist;}@end


0 0