面试算法题1

作者: 侭情显現 | 来源:发表于2020-05-21 23:35 被阅读0次

●出栈合法问题:都知道栈遵守"先进后出"原则,有n个数字,按照1到n的顺序依次进栈。假设n为5,那么出栈顺序(1, 2, 3, 4, 5)是可能的,顺序(1,4,2, 3, 5)是不可能的。给你数据要求输出,是否是可能的结果。

数据样例如下:
1,2,3,4,5
打印结果: YES

1,4,2,3,5
打印结果: NO

使用OC语言方案如下:

-(BOOL)getResult:(NSArray *)dataArr{
NSArray * orderDatas = @[@"1",@"2",@"3",@"4",@"5"];
//栈内元素-只和栈内最后一条比较
NSMutableArray * muArr = [NSMutableArray array];
//出栈数据
NSMutableArray * goOutArr = [NSMutableArray array];

NSInteger i = 0;
for (NSString * data in dataArr) {
    BOOL comeOn = YES;
    while (comeOn) {
        NSString * enterStr = @"";
        if (i < orderDatas.count) {
            enterStr = orderDatas[I];
        }
        if (i == 0) {
            [muArr addObject:enterStr];
            comeOn = YES;
        }else{
            NSString * enterLast = muArr.lastObject;
            if (data.intValue == enterLast.intValue) {
                [muArr removeObject:enterLast];
                [goOutArr addObject:enterLast];
                comeOn = NO;
            }else{
                if (enterStr.length > 0) {
                    [muArr addObject:enterStr];
                    comeOn = YES;
                }else{
                    comeOn = NO;
                }
            }
        }
        if (comeOn == YES) {
            I++;
        }
    }
}

if (goOutArr.count == 5) {
    return YES;
}else{
    return NO;
}
}

思路如下:

image.png

相关文章

网友评论

    本文标题:面试算法题1

    本文链接:https://www.haomeiwen.com/subject/tjzxahtx.html